32775/backend/src/db/seeders/20231127130745-sample-data.js
2025-07-12 18:49:15 +00:00

292 lines
6.0 KiB
JavaScript

const db = require('../models');
const Users = db.users;
const Ads = db.ads;
const Categories = db.categories;
const Reviews = db.reviews;
const Services = db.services;
const AdsData = [
{
title: 'Summer Sale',
content: 'Get 20% off on all services this summer!',
start_date: new Date('2023-06-01T00:00:00Z'),
end_date: new Date('2023-08-31T23:59:59Z'),
type: 'banner',
},
{
title: 'New Year Offer',
content: 'Start the year with a clean home!',
start_date: new Date('2024-01-01T00:00:00Z'),
end_date: new Date('2024-01-31T23:59:59Z'),
type: 'banner',
},
{
title: 'Spring Cleaning',
content: 'Special rates for spring cleaning services.',
start_date: new Date('2023-03-01T00:00:00Z'),
end_date: new Date('2023-03-31T23:59:59Z'),
type: 'sliding_banner',
},
];
const CategoriesData = [
{
name: 'Home Services',
// type code here for "relation_many" field
},
{
name: 'Outdoor Services',
// type code here for "relation_many" field
},
{
name: 'Maintenance',
// type code here for "relation_many" field
},
];
const ReviewsData = [
{
// type code here for "relation_one" field
// type code here for "relation_one" field
rating: 5,
comment: 'Excellent service, very professional!',
},
{
// type code here for "relation_one" field
// type code here for "relation_one" field
rating: 4,
comment: 'Good job, but a bit late.',
},
{
// type code here for "relation_one" field
// type code here for "relation_one" field
rating: 5,
comment: 'Quick and efficient work.',
},
];
const ServicesData = [
{
name: 'Plumbing',
description: 'Fixing leaks and installing pipes',
// type code here for "relation_one" field
distance: 5.2,
// type code here for "images" field
// type code here for "relation_many" field
},
{
name: 'Gardening',
description: 'Lawn mowing and garden maintenance',
// type code here for "relation_one" field
distance: 3.8,
// type code here for "images" field
// type code here for "relation_many" field
},
{
name: 'Electrical',
description: 'Wiring and electrical repairs',
// type code here for "relation_one" field
distance: 7.1,
// type code here for "images" field
// type code here for "relation_many" field
},
];
// Similar logic for "relation_many"
// Similar logic for "relation_many"
async function associateReviewWithService() {
const relatedService0 = await Services.findOne({
offset: Math.floor(Math.random() * (await Services.count())),
});
const Review0 = await Reviews.findOne({
order: [['id', 'ASC']],
offset: 0,
});
if (Review0?.setService) {
await Review0.setService(relatedService0);
}
const relatedService1 = await Services.findOne({
offset: Math.floor(Math.random() * (await Services.count())),
});
const Review1 = await Reviews.findOne({
order: [['id', 'ASC']],
offset: 1,
});
if (Review1?.setService) {
await Review1.setService(relatedService1);
}
const relatedService2 = await Services.findOne({
offset: Math.floor(Math.random() * (await Services.count())),
});
const Review2 = await Reviews.findOne({
order: [['id', 'ASC']],
offset: 2,
});
if (Review2?.setService) {
await Review2.setService(relatedService2);
}
}
async function associateReviewWithUser() {
const relatedUser0 = await Users.findOne({
offset: Math.floor(Math.random() * (await Users.count())),
});
const Review0 = await Reviews.findOne({
order: [['id', 'ASC']],
offset: 0,
});
if (Review0?.setUser) {
await Review0.setUser(relatedUser0);
}
const relatedUser1 = await Users.findOne({
offset: Math.floor(Math.random() * (await Users.count())),
});
const Review1 = await Reviews.findOne({
order: [['id', 'ASC']],
offset: 1,
});
if (Review1?.setUser) {
await Review1.setUser(relatedUser1);
}
const relatedUser2 = await Users.findOne({
offset: Math.floor(Math.random() * (await Users.count())),
});
const Review2 = await Reviews.findOne({
order: [['id', 'ASC']],
offset: 2,
});
if (Review2?.setUser) {
await Review2.setUser(relatedUser2);
}
}
async function associateServiceWithProvider() {
const relatedProvider0 = await Users.findOne({
offset: Math.floor(Math.random() * (await Users.count())),
});
const Service0 = await Services.findOne({
order: [['id', 'ASC']],
offset: 0,
});
if (Service0?.setProvider) {
await Service0.setProvider(relatedProvider0);
}
const relatedProvider1 = await Users.findOne({
offset: Math.floor(Math.random() * (await Users.count())),
});
const Service1 = await Services.findOne({
order: [['id', 'ASC']],
offset: 1,
});
if (Service1?.setProvider) {
await Service1.setProvider(relatedProvider1);
}
const relatedProvider2 = await Users.findOne({
offset: Math.floor(Math.random() * (await Users.count())),
});
const Service2 = await Services.findOne({
order: [['id', 'ASC']],
offset: 2,
});
if (Service2?.setProvider) {
await Service2.setProvider(relatedProvider2);
}
}
// Similar logic for "relation_many"
module.exports = {
up: async (queryInterface, Sequelize) => {
await Ads.bulkCreate(AdsData);
await Categories.bulkCreate(CategoriesData);
await Reviews.bulkCreate(ReviewsData);
await Services.bulkCreate(ServicesData);
await Promise.all([
// Similar logic for "relation_many"
// Similar logic for "relation_many"
await associateReviewWithService(),
await associateReviewWithUser(),
await associateServiceWithProvider(),
// Similar logic for "relation_many"
]);
},
down: async (queryInterface, Sequelize) => {
await queryInterface.bulkDelete('ads', null, {});
await queryInterface.bulkDelete('categories', null, {});
await queryInterface.bulkDelete('reviews', null, {});
await queryInterface.bulkDelete('services', null, {});
},
};