225 lines
5.7 KiB
TypeScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { PrismaClient } from "@prisma/client";
const prisma = new PrismaClient();
async function main() {
console.log("🌱 Seeding database...");
// Create tags
const tagCheap = await prisma.tag.upsert({
where: { slug: "guenstig" },
update: {},
create: {
name: "Günstig",
slug: "guenstig",
color: "#22c55e",
},
});
const tagFavorite = await prisma.tag.upsert({
where: { slug: "favorit" },
update: {},
create: {
name: "Favorit",
slug: "favorit",
color: "#eab308",
},
});
const tagGroup = await prisma.tag.upsert({
where: { slug: "gruppe" },
update: {},
create: {
name: "Für Gruppen",
slug: "gruppe",
color: "#8b5cf6",
},
});
// Create sample listings
const listing1 = await prisma.listing.upsert({
where: { slug: "loft-mit-elbblick-12345678" },
update: {},
create: {
title: "Loft mit Elbblick",
slug: "loft-mit-elbblick-12345678",
airbnbUrl: "https://www.airbnb.com/rooms/12345678",
normalizedUrl: "https://airbnb.com/rooms/12345678",
externalId: "12345678",
locationText: "Dresden, Sachsen",
latitude: 51.0504,
longitude: 13.7373,
nightlyPrice: 129.00,
rating: 4.91,
reviewCount: 87,
officialGuestCount: 4,
maxSleepingPlaces: 4,
suitableFor4: true,
extraMattressesNeededFor4: 0,
bedTypesSummary: "1× Doppelbett, 1× Schlafsofa",
bedrooms: 2,
beds: 2,
bathrooms: 1.0,
description: "Wunderschönes Loft mit Blick auf die Elbe. Perfekt für Paare oder kleine Gruppen.",
hostName: "Anna",
isFavorite: true,
status: "SHORTLIST",
coverImage: "https://images.unsplash.com/photo-1502672260266-1c1ef2d93688?w=800",
},
});
// Add sleeping options
await prisma.listingSleepingOption.createMany({
data: [
{
listingId: listing1.id,
bedType: "DOUBLE",
quantity: 1,
spotsPerUnit: 2,
quality: "FULL",
},
{
listingId: listing1.id,
bedType: "SOFA_BED",
quantity: 1,
spotsPerUnit: 2,
quality: "FULL",
},
],
});
// Add tags
await prisma.listingTag.createMany({
data: [
{ listingId: listing1.id, tagId: tagFavorite.id },
{ listingId: listing1.id, tagId: tagGroup.id },
],
});
// Second listing
const listing2 = await prisma.listing.upsert({
where: { slug: "moderne-wohnung-zentrum-87654321" },
update: {},
create: {
title: "Moderne Wohnung im Zentrum",
slug: "moderne-wohnung-zentrum-87654321",
airbnbUrl: "https://www.airbnb.com/rooms/87654321",
normalizedUrl: "https://airbnb.com/rooms/87654321",
externalId: "87654321",
locationText: "Leipzig, Sachsen",
latitude: 51.3397,
longitude: 12.3731,
nightlyPrice: 89.00,
rating: 4.78,
reviewCount: 42,
officialGuestCount: 3,
maxSleepingPlaces: 3,
suitableFor4: false,
extraMattressesNeededFor4: 1,
bedTypesSummary: "1× Doppelbett, 1× Einzelbett",
bedrooms: 1,
beds: 2,
bathrooms: 1.0,
description: "Zentral gelegene Wohnung mit modernem Komfort.",
hostName: "Thomas",
isFavorite: false,
status: "INTERESTING",
coverImage: "https://images.unsplash.com/photo-1560448204-e02f11c3d0e2?w=800",
},
});
await prisma.listingSleepingOption.createMany({
data: [
{
listingId: listing2.id,
bedType: "DOUBLE",
quantity: 1,
spotsPerUnit: 2,
quality: "FULL",
},
{
listingId: listing2.id,
bedType: "SINGLE",
quantity: 1,
spotsPerUnit: 1,
quality: "FULL",
},
],
});
await prisma.listingTag.create({
data: { listingId: listing2.id, tagId: tagCheap.id },
});
// Third listing
const listing3 = await prisma.listing.upsert({
where: { slug: "luxus-penthouse-berlin-55555555" },
update: {},
create: {
title: "Luxus-Penthouse am Alexanderplatz",
slug: "luxus-penthouse-berlin-55555555",
airbnbUrl: "https://www.airbnb.com/rooms/55555555",
normalizedUrl: "https://airbnb.com/rooms/55555555",
externalId: "55555555",
locationText: "Berlin, Mitte",
latitude: 52.5200,
longitude: 13.4050,
nightlyPrice: 299.00,
rating: 4.95,
reviewCount: 156,
officialGuestCount: 6,
maxSleepingPlaces: 6,
suitableFor4: true,
extraMattressesNeededFor4: 0,
bedTypesSummary: "2× Doppelbett, 1× Schlafsofa",
bedrooms: 3,
beds: 3,
bathrooms: 2.0,
description: "Luxuriöses Penthouse mit 360° Aussicht über Berlin. Perfekt für besondere Anlässe.",
hostName: "Sophie",
isFavorite: true,
status: "SHORTLIST",
coverImage: "https://images.unsplash.com/photo-1600596542815-ffad4c1539a9?w=800",
},
});
await prisma.listingSleepingOption.createMany({
data: [
{
listingId: listing3.id,
bedType: "DOUBLE",
quantity: 2,
spotsPerUnit: 2,
quality: "FULL",
},
{
listingId: listing3.id,
bedType: "SOFA_BED",
quantity: 1,
spotsPerUnit: 2,
quality: "FULL",
},
],
});
await prisma.listingTag.createMany({
data: [
{ listingId: listing3.id, tagId: tagFavorite.id },
{ listingId: listing3.id, tagId: tagGroup.id },
],
});
console.log("✅ Database seeded successfully!");
console.log(` - ${3} listings created`);
console.log(` - ${3} tags created`);
}
main()
.catch((e) => {
console.error(e);
process.exit(1);
})
.finally(async () => {
await prisma.$disconnect();
});