const db = require('../models'); const Users = db.users; const Categories = db.categories; const Products = db.products; const Orders = db.orders; const OrderItems = db.order_items; const ContactMessages = db.contact_messages; const SitePages = db.site_pages; const BusinessPartners = db.business_partners; const Promotions = db.promotions; const Reviews = db.reviews; const CategoriesData = [ { "name": "Texas Statutes", "slug": "texas-statutes", "description": "Print and annotated compilations of Texas statutes for practitioners and students.", "is_active": true, "sort_order": 1, }, { "name": "Practice Guides", "slug": "practice-guides", "description": "Step by step guides for Texas civil, criminal, and family practice.", "is_active": true, "sort_order": 2, }, { "name": "Forms and Templates", "slug": "forms-and-templates", "description": "Common pleading and transactional forms with practical checklists.", "is_active": true, "sort_order": 3, }, { "name": "Continuing Legal Education", "slug": "continuing-legal-education", "description": "CLE style reference materials and course books for Texas attorneys.", "is_active": true, "sort_order": 4, }, { "name": "Ethics and Professional Responsibility", "slug": "ethics-professional-responsibility", "description": "Resources on Texas disciplinary rules, ethics opinions, and compliance.", "is_active": true, "sort_order": 5, }, ]; const ProductsData = [ { "title": "Texas Penal Code Annotated 2026", "slug": "texas-penal-code-annotated-2026", "sku": "TX-PC-2026", "product_type": "service", "short_description": "Updated annotated Penal Code with key case notes.", "description": "A practitioner focused annotated edition of the Texas Penal Code, including recent legislative updates, selected case summaries, and practical cross references.", // type code here for "relation_one" field "price": 129.0, "compare_at_price": 149.0, "is_taxable": true, "tax_rate": 0.0825, "inventory_quantity": 45, "track_inventory": true, "status": "draft", // type code here for "images" field // type code here for "files" field "author": "Editorial Board", "publisher": "Texas Law Books Co.", "isbn": "9780000001001", "edition": "2026", "published_on": new Date('2026-01-10T00:00:00Z'), "page_count": 980, }, { "title": "Texas Family Law Practice Guide", "slug": "texas-family-law-practice-guide", "sku": "TX-FAM-GUIDE", "product_type": "service", "short_description": "Practical family law workflow and checklists.", "description": "Comprehensive Texas family law practice guide covering divorce, SAPCR, enforcement, and modification with procedural checklists and drafting tips.", // type code here for "relation_one" field "price": 179.0, "compare_at_price": 199.0, "is_taxable": true, "tax_rate": 0.0825, "inventory_quantity": 30, "track_inventory": true, "status": "active", // type code here for "images" field // type code here for "files" field "author": "K. S. Whitman", "publisher": "Texas Law Books Co.", "isbn": "9780000001002", "edition": "5th", "published_on": new Date('2025-09-01T00:00:00Z'), "page_count": 1200, }, { "title": "Texas Civil Pleadings Form Pack", "slug": "texas-civil-pleadings-form-pack", "sku": "TX-CIV-FORMS", "product_type": "digital_download", "short_description": "Editable civil pleading templates.", "description": "Downloadable civil pleadings templates formatted for Texas courts, including petitions, answers, discovery requests, and proposed orders.", // type code here for "relation_one" field "price": 79.0, "compare_at_price": 99.0, "is_taxable": true, "tax_rate": 0.0825, "inventory_quantity": 9999, "track_inventory": false, "status": "active", // type code here for "images" field // type code here for "files" field "author": "Forms Department", "publisher": "Texas Law Books Co.", "isbn": "9780000001003", "edition": "2026 Update", "published_on": new Date('2026-02-15T00:00:00Z'), "page_count": 0, }, { "title": "Texas Ethics Deskbook", "slug": "texas-ethics-deskbook", "sku": "TX-ETHICS-DESK", "product_type": "bundle", "short_description": "Guidance on Texas ethics and compliance.", "description": "A deskbook on Texas professional responsibility with rule commentary, common scenarios, and practical compliance checklists for law offices.", // type code here for "relation_one" field "price": 99.0, "compare_at_price": 119.0, "is_taxable": true, "tax_rate": 0.0825, "inventory_quantity": 55, "track_inventory": true, "status": "archived", // type code here for "images" field // type code here for "files" field "author": "M. L. Herrera", "publisher": "Texas Law Books Co.", "isbn": "9780000001004", "edition": "3rd", "published_on": new Date('2024-11-20T00:00:00Z'), "page_count": 640, }, { "title": "Texas Litigation Starter Bundle", "slug": "texas-litigation-starter-bundle", "sku": "TX-LIT-BUNDLE", "product_type": "book", "short_description": "Bundle for new Texas litigation matters.", "description": "A curated bundle including a civil procedure reference, key checklists, and a starter set of forms to streamline Texas litigation intake and early filings.", // type code here for "relation_one" field "price": 249.0, "compare_at_price": 299.0, "is_taxable": true, "tax_rate": 0.0825, "inventory_quantity": 20, "track_inventory": true, "status": "draft", // type code here for "images" field // type code here for "files" field "author": "Editorial Board", "publisher": "Texas Law Books Co.", "isbn": "9780000001005", "edition": "2026", "published_on": new Date('2026-03-05T00:00:00Z'), "page_count": 0, }, ]; const OrdersData = [ { "order_number": "TLB-100021", // type code here for "relation_one" field "status": "paid", "subtotal_amount": 308.0, "discount_amount": 20.0, "tax_amount": 23.76, "shipping_amount": 12.95, "total_amount": 324.71, "payment_method": "cash", "payment_status": "paid", "billing_name": "Casey Thompson", "billing_email": "casey.thompson@lawfirmdemo.com", "billing_phone": "210-555-0133", "billing_address_line1": "200 E Houston St", "billing_address_line2": "Ste 950", "billing_city": "San Antonio", "billing_state": "TX", "billing_postal_code": "78205", "billing_country": "USA", "shipping_name": "Casey Thompson", "shipping_phone": "210-555-0133", "shipping_address_line1": "200 E Houston St", "shipping_address_line2": "Ste 950", "shipping_city": "San Antonio", "shipping_state": "TX", "shipping_postal_code": "78205", "shipping_country": "USA", "placed_at": new Date('2026-05-01T16:20:00Z'), "paid_at": new Date('2026-05-01T16:22:00Z'), "shipped_at": new Date('2026-05-03T18:10:00Z'), "internal_note": "Priority handling requested via email.", }, { "order_number": "TLB-100022", // type code here for "relation_one" field "status": "completed", "subtotal_amount": 99.0, "discount_amount": 0.0, "tax_amount": 8.17, "shipping_amount": 9.95, "total_amount": 117.12, "payment_method": "card", "payment_status": "partially_refunded", "billing_name": "Riley Garcia", "billing_email": "riley.garcia@paralegaldemo.com", "billing_phone": "806-555-0144", "billing_address_line1": "600 S Tyler St", "billing_address_line2": "Unit 4B", "billing_city": "Amarillo", "billing_state": "TX", "billing_postal_code": "79101", "billing_country": "USA", "shipping_name": "Riley Garcia", "shipping_phone": "806-555-0144", "shipping_address_line1": "600 S Tyler St", "shipping_address_line2": "Unit 4B", "shipping_city": "Amarillo", "shipping_state": "TX", "shipping_postal_code": "79101", "shipping_country": "USA", "placed_at": new Date('2026-05-06T14:05:00Z'), "paid_at": new Date('2026-05-06T14:05:00Z'), "shipped_at": new Date('2026-05-07T20:00:00Z'), "internal_note": "Invoice terms requested net 15.", }, { "order_number": "TLB-100023", // type code here for "relation_one" field "status": "processing", "subtotal_amount": 129.0, "discount_amount": 0.0, "tax_amount": 10.64, "shipping_amount": 12.95, "total_amount": 152.59, "payment_method": "other", "payment_status": "unpaid", "billing_name": "Casey Thompson", "billing_email": "casey.thompson@lawfirmdemo.com", "billing_phone": "210-555-0133", "billing_address_line1": "200 E Houston St", "billing_address_line2": "Ste 950", "billing_city": "San Antonio", "billing_state": "TX", "billing_postal_code": "78205", "billing_country": "USA", "shipping_name": "Casey Thompson", "shipping_phone": "210-555-0133", "shipping_address_line1": "200 E Houston St", "shipping_address_line2": "Ste 950", "shipping_city": "San Antonio", "shipping_state": "TX", "shipping_postal_code": "78205", "shipping_country": "USA", "placed_at": new Date('2026-05-09T10:40:00Z'), "paid_at": new Date('2026-05-09T10:41:00Z'), "shipped_at": new Date('2026-05-10T17:30:00Z'), "internal_note": "Ship to reception desk.", }, { "order_number": "TLB-100024", // type code here for "relation_one" field "status": "paid", "subtotal_amount": 79.0, "discount_amount": 0.0, "tax_amount": 6.52, "shipping_amount": 0.0, "total_amount": 85.52, "payment_method": "invoice", "payment_status": "partially_refunded", "billing_name": "Riley Garcia", "billing_email": "riley.garcia@paralegaldemo.com", "billing_phone": "806-555-0144", "billing_address_line1": "600 S Tyler St", "billing_address_line2": "Unit 4B", "billing_city": "Amarillo", "billing_state": "TX", "billing_postal_code": "79101", "billing_country": "USA", "shipping_name": "Riley Garcia", "shipping_phone": "806-555-0144", "shipping_address_line1": "600 S Tyler St", "shipping_address_line2": "Unit 4B", "shipping_city": "Amarillo", "shipping_state": "TX", "shipping_postal_code": "79101", "shipping_country": "USA", "placed_at": new Date('2026-05-12T09:15:00Z'), "paid_at": new Date('2026-05-12T09:15:00Z'), "shipped_at": new Date('2026-05-12T09:15:00Z'), "internal_note": "Digital download order, auto fulfillment.", }, { "order_number": "TLB-100025", // type code here for "relation_one" field "status": "pending", "subtotal_amount": 179.0, "discount_amount": 10.0, "tax_amount": 13.94, "shipping_amount": 12.95, "total_amount": 195.89, "payment_method": "cash", "payment_status": "unpaid", "billing_name": "Casey Thompson", "billing_email": "casey.thompson@lawfirmdemo.com", "billing_phone": "210-555-0133", "billing_address_line1": "200 E Houston St", "billing_address_line2": "Ste 950", "billing_city": "San Antonio", "billing_state": "TX", "billing_postal_code": "78205", "billing_country": "USA", "shipping_name": "Casey Thompson", "shipping_phone": "210-555-0133", "shipping_address_line1": "200 E Houston St", "shipping_address_line2": "Ste 950", "shipping_city": "San Antonio", "shipping_state": "TX", "shipping_postal_code": "78205", "shipping_country": "USA", "placed_at": new Date('2026-05-15T13:00:00Z'), "paid_at": new Date('2026-05-15T13:01:00Z'), "shipped_at": new Date('2026-05-16T19:25:00Z'), "internal_note": "Include packing slip without prices.", }, ]; const OrderItemsData = [ { // type code here for "relation_one" field // type code here for "relation_one" field "product_title_snapshot": "Texas Family Law Practice Guide", "sku_snapshot": "TX-FAM-GUIDE", "unit_price": 179.0, "quantity": 1, "line_total": 179.0, }, { // type code here for "relation_one" field // type code here for "relation_one" field "product_title_snapshot": "Texas Ethics Deskbook", "sku_snapshot": "TX-ETHICS-DESK", "unit_price": 99.0, "quantity": 1, "line_total": 99.0, }, { // type code here for "relation_one" field // type code here for "relation_one" field "product_title_snapshot": "Texas Civil Pleadings Form Pack", "sku_snapshot": "TX-CIV-FORMS", "unit_price": 79.0, "quantity": 1, "line_total": 79.0, }, { // type code here for "relation_one" field // type code here for "relation_one" field "product_title_snapshot": "Texas Penal Code Annotated 2026", "sku_snapshot": "TX-PC-2026", "unit_price": 129.0, "quantity": 1, "line_total": 129.0, }, { // type code here for "relation_one" field // type code here for "relation_one" field "product_title_snapshot": "Texas Family Law Practice Guide", "sku_snapshot": "TX-FAM-GUIDE", "unit_price": 179.0, "quantity": 1, "line_total": 179.0, }, ]; const ContactMessagesData = [ { "full_name": "Jamie Collins", "email": "jamie.collins@firmdemo.com", "phone": "469-555-0188", "topic": "product_question", "message": "Do you offer an annual update service for the Penal Code annotated edition", "status": "new", "submitted_at": new Date('2026-05-02T11:30:00Z'), // type code here for "relation_one" field }, { "full_name": "Taylor Brooks", "email": "taylor.brooks@nonprofitdemo.org", "phone": "832-555-0191", "topic": "wholesale", "message": "We would like pricing for a bulk order of ethics deskbooks for our clinic program", "status": "in_progress", "submitted_at": new Date('2026-05-04T15:05:00Z'), // type code here for "relation_one" field }, { "full_name": "Cameron Lee", "email": "cameron.lee@lawfirmdemo.com", "phone": "512-555-0199", "topic": "order_support", "message": "Order TLB-100021 arrived with minor corner damage on one book can we request a replacement", "status": "in_progress", "submitted_at": new Date('2026-05-05T09:45:00Z'), // type code here for "relation_one" field }, { "full_name": "Sydney Ramirez", "email": "sydney.ramirez@procurementdemo.com", "phone": "210-555-0177", "topic": "wholesale", "message": "Our organization is interested in a dealer partnership and cross promotion opportunities", "status": "closed", "submitted_at": new Date('2026-05-08T14:10:00Z'), // type code here for "relation_one" field }, { "full_name": "Quinn Harper", "email": "quinn.harper@educationdemo.edu", "phone": "713-555-0166", "topic": "product_question", "message": "Do you have student discounts for practice guides and bundles", "status": "in_progress", "submitted_at": new Date('2026-05-10T18:20:00Z'), // type code here for "relation_one" field }, ]; const SitePagesData = [ { "title": "Home", "slug": "home", "page_type": "catalog", "hero_headline": "Texas Law Books and Practice Resources", "hero_subheadline": "Professional black and white design with light green accents for quick access to trusted Texas legal references.", "hero_partner_anchor_text": "Law Source", "hero_partner_url": "https://legaldowntown.com/", // type code here for "images" field "content": "Welcome to our Texas based law book shop Browse updated titles practice guides and downloadable forms Contact us for bulk orders and partnerships.", "status": "published", "published_at": new Date('2026-04-01T12:00:00Z'), }, { "title": "About", "slug": "about", "page_type": "about", "hero_headline": "Built for Texas practitioners", "hero_subheadline": "Curated legal references and practical tools for day to day work.", "hero_partner_anchor_text": "Law Source", "hero_partner_url": "https://legaldowntown.com/", // type code here for "images" field "content": "We focus on practical Texas focused materials for attorneys paralegals and students Our team updates key titles and bundles to match evolving needs.", "status": "published", "published_at": new Date('2026-04-01T12:05:00Z'), }, { "title": "Catalog", "slug": "catalog", "page_type": "contact", "hero_headline": "Browse the catalog", "hero_subheadline": "Statutes practice guides forms and ethics references.", "hero_partner_anchor_text": "Law Source", "hero_partner_url": "https://legaldowntown.com/", // type code here for "images" field "content": "Use categories to find titles quickly Filter by print bundles and digital downloads for immediate access.", "status": "draft", "published_at": new Date('2026-04-01T12:10:00Z'), }, { "title": "Contact", "slug": "contact", "page_type": "privacy", "hero_headline": "Contact our team", "hero_subheadline": "Questions about titles orders or bulk pricing We can help.", "hero_partner_anchor_text": "Law Source", "hero_partner_url": "https://legaldowntown.com/", // type code here for "images" field "content": "Send a message with your topic and details Our staff responds during business hours Central Time.", "status": "draft", "published_at": new Date('2026-04-01T12:15:00Z'), }, { "title": "Terms of Service", "slug": "terms", "page_type": "catalog", "hero_headline": "Terms of Service", "hero_subheadline": "Clear policies for purchases and downloads.", "hero_partner_anchor_text": "Law Source", "hero_partner_url": "https://legaldowntown.com/", // type code here for "images" field "content": "All sales policies shipping timelines and digital download terms are described here Contact support for help with access issues.", "status": "published", "published_at": new Date('2026-04-01T12:20:00Z'), }, ]; const BusinessPartnersData = [ { "name": "Legal Downtown Dealer Network", "anchor_text": "Law Source", "url": "https://legaldowntown.com/", "description": "Authorized partner and dealer network for legal resources and referrals.", "is_featured_in_hero": true, "is_active": true, "sort_order": 1, }, { "name": "Texas Court Filings Supply Co", "anchor_text": "Texas Filing Supplies", "url": "#", "description": "Demo partner for filing supplies and office materials.", "is_featured_in_hero": true, "is_active": true, "sort_order": 2, }, { "name": "Hill Country Print Services", "anchor_text": "Print Services", "url": "#", "description": "Demo partner for print and binding services for internal use materials.", "is_featured_in_hero": true, "is_active": true, "sort_order": 3, }, { "name": "Gulf Coast Legal Courier", "anchor_text": "Courier Service", "url": "#", "description": "Demo partner for regional courier delivery options.", "is_featured_in_hero": true, "is_active": true, "sort_order": 4, }, { "name": "West Texas CLE Events", "anchor_text": "CLE Events", "url": "#", "description": "Demo partner for legal education event coordination.", "is_featured_in_hero": false, "is_active": true, "sort_order": 5, }, ]; const PromotionsData = [ { "name": "Spring Practitioner Savings", "code": "SPRING26", "discount_type": "free_shipping", "discount_value": 10.0, "minimum_order_amount": 150.0, "starts_at": new Date('2026-04-15T00:00:00Z'), "ends_at": new Date('2026-05-15T23:59:59Z'), "usage_limit": 500, "used_count": 38, "status": "paused", }, { "name": "Free Shipping Over 200", "code": "SHIP200", "discount_type": "free_shipping", "discount_value": 0.0, "minimum_order_amount": 200.0, "starts_at": new Date('2026-05-01T00:00:00Z'), "ends_at": new Date('2026-12-31T23:59:59Z'), "usage_limit": 2000, "used_count": 124, "status": "paused", }, { "name": "CLE Bundle Discount", "code": "CLE15", "discount_type": "percentage", "discount_value": 15.0, "minimum_order_amount": 100.0, "starts_at": new Date('2026-06-01T00:00:00Z'), "ends_at": new Date('2026-08-31T23:59:59Z'), "usage_limit": 800, "used_count": 0, "status": "active", }, { "name": "New Customer Credit", "code": "WELCOME10", "discount_type": "free_shipping", "discount_value": 10.0, "minimum_order_amount": 75.0, "starts_at": new Date('2026-05-10T00:00:00Z'), "ends_at": new Date('2026-10-31T23:59:59Z'), "usage_limit": 1500, "used_count": 210, "status": "paused", }, { "name": "Summer Forms Promo", "code": "FORMS20", "discount_type": "free_shipping", "discount_value": 20.0, "minimum_order_amount": 50.0, "starts_at": new Date('2026-07-01T00:00:00Z'), "ends_at": new Date('2026-07-31T23:59:59Z'), "usage_limit": 600, "used_count": 0, "status": "scheduled", }, ]; const ReviewsData = [ { // type code here for "relation_one" field // type code here for "relation_one" field "rating": 5, "title": "Thorough and current", "body": "Very helpful annotations and organization The updates appear current and easy to find.", "status": "pending", "submitted_at": new Date('2026-05-11T12:00:00Z'), }, { // type code here for "relation_one" field // type code here for "relation_one" field "rating": 4, "title": "Strong practice checklists", "body": "The checklists are practical and save time for intake and first filings.", "status": "approved", "submitted_at": new Date('2026-05-12T09:30:00Z'), }, { // type code here for "relation_one" field // type code here for "relation_one" field "rating": 5, "title": "Great desk reference", "body": "Clear explanations and realistic scenarios for everyday compliance questions.", "status": "rejected", "submitted_at": new Date('2026-05-13T14:10:00Z'), }, { // type code here for "relation_one" field // type code here for "relation_one" field "rating": 4, "title": "Good templates", "body": "Templates are clean and easy to adapt for typical matters.", "status": "rejected", "submitted_at": new Date('2026-05-14T16:45:00Z'), }, { // type code here for "relation_one" field // type code here for "relation_one" field "rating": 4, "title": "Useful starter set", "body": "Nice bundle for getting a new case organized quickly.", "status": "pending", "submitted_at": new Date('2026-05-16T10:25:00Z'), }, ]; // Similar logic for "relation_many" async function associateProductWithCategory() { const relatedCategory0 = await Categories.findOne({ offset: Math.floor(Math.random() * (await Categories.count())), }); const Product0 = await Products.findOne({ order: [['id', 'ASC']], offset: 0 }); if (Product0?.setCategory) { await Product0. setCategory(relatedCategory0); } const relatedCategory1 = await Categories.findOne({ offset: Math.floor(Math.random() * (await Categories.count())), }); const Product1 = await Products.findOne({ order: [['id', 'ASC']], offset: 1 }); if (Product1?.setCategory) { await Product1. setCategory(relatedCategory1); } const relatedCategory2 = await Categories.findOne({ offset: Math.floor(Math.random() * (await Categories.count())), }); const Product2 = await Products.findOne({ order: [['id', 'ASC']], offset: 2 }); if (Product2?.setCategory) { await Product2. setCategory(relatedCategory2); } const relatedCategory3 = await Categories.findOne({ offset: Math.floor(Math.random() * (await Categories.count())), }); const Product3 = await Products.findOne({ order: [['id', 'ASC']], offset: 3 }); if (Product3?.setCategory) { await Product3. setCategory(relatedCategory3); } const relatedCategory4 = await Categories.findOne({ offset: Math.floor(Math.random() * (await Categories.count())), }); const Product4 = await Products.findOne({ order: [['id', 'ASC']], offset: 4 }); if (Product4?.setCategory) { await Product4. setCategory(relatedCategory4); } } async function associateOrderWithCustomer() { const relatedCustomer0 = await Users.findOne({ offset: Math.floor(Math.random() * (await Users.count())), }); const Order0 = await Orders.findOne({ order: [['id', 'ASC']], offset: 0 }); if (Order0?.setCustomer) { await Order0. setCustomer(relatedCustomer0); } const relatedCustomer1 = await Users.findOne({ offset: Math.floor(Math.random() * (await Users.count())), }); const Order1 = await Orders.findOne({ order: [['id', 'ASC']], offset: 1 }); if (Order1?.setCustomer) { await Order1. setCustomer(relatedCustomer1); } const relatedCustomer2 = await Users.findOne({ offset: Math.floor(Math.random() * (await Users.count())), }); const Order2 = await Orders.findOne({ order: [['id', 'ASC']], offset: 2 }); if (Order2?.setCustomer) { await Order2. setCustomer(relatedCustomer2); } const relatedCustomer3 = await Users.findOne({ offset: Math.floor(Math.random() * (await Users.count())), }); const Order3 = await Orders.findOne({ order: [['id', 'ASC']], offset: 3 }); if (Order3?.setCustomer) { await Order3. setCustomer(relatedCustomer3); } const relatedCustomer4 = await Users.findOne({ offset: Math.floor(Math.random() * (await Users.count())), }); const Order4 = await Orders.findOne({ order: [['id', 'ASC']], offset: 4 }); if (Order4?.setCustomer) { await Order4. setCustomer(relatedCustomer4); } } async function associateOrderItemWithOrder() { const relatedOrder0 = await Orders.findOne({ offset: Math.floor(Math.random() * (await Orders.count())), }); const OrderItem0 = await OrderItems.findOne({ order: [['id', 'ASC']], offset: 0 }); if (OrderItem0?.setOrder) { await OrderItem0. setOrder(relatedOrder0); } const relatedOrder1 = await Orders.findOne({ offset: Math.floor(Math.random() * (await Orders.count())), }); const OrderItem1 = await OrderItems.findOne({ order: [['id', 'ASC']], offset: 1 }); if (OrderItem1?.setOrder) { await OrderItem1. setOrder(relatedOrder1); } const relatedOrder2 = await Orders.findOne({ offset: Math.floor(Math.random() * (await Orders.count())), }); const OrderItem2 = await OrderItems.findOne({ order: [['id', 'ASC']], offset: 2 }); if (OrderItem2?.setOrder) { await OrderItem2. setOrder(relatedOrder2); } const relatedOrder3 = await Orders.findOne({ offset: Math.floor(Math.random() * (await Orders.count())), }); const OrderItem3 = await OrderItems.findOne({ order: [['id', 'ASC']], offset: 3 }); if (OrderItem3?.setOrder) { await OrderItem3. setOrder(relatedOrder3); } const relatedOrder4 = await Orders.findOne({ offset: Math.floor(Math.random() * (await Orders.count())), }); const OrderItem4 = await OrderItems.findOne({ order: [['id', 'ASC']], offset: 4 }); if (OrderItem4?.setOrder) { await OrderItem4. setOrder(relatedOrder4); } } async function associateOrderItemWithProduct() { const relatedProduct0 = await Products.findOne({ offset: Math.floor(Math.random() * (await Products.count())), }); const OrderItem0 = await OrderItems.findOne({ order: [['id', 'ASC']], offset: 0 }); if (OrderItem0?.setProduct) { await OrderItem0. setProduct(relatedProduct0); } const relatedProduct1 = await Products.findOne({ offset: Math.floor(Math.random() * (await Products.count())), }); const OrderItem1 = await OrderItems.findOne({ order: [['id', 'ASC']], offset: 1 }); if (OrderItem1?.setProduct) { await OrderItem1. setProduct(relatedProduct1); } const relatedProduct2 = await Products.findOne({ offset: Math.floor(Math.random() * (await Products.count())), }); const OrderItem2 = await OrderItems.findOne({ order: [['id', 'ASC']], offset: 2 }); if (OrderItem2?.setProduct) { await OrderItem2. setProduct(relatedProduct2); } const relatedProduct3 = await Products.findOne({ offset: Math.floor(Math.random() * (await Products.count())), }); const OrderItem3 = await OrderItems.findOne({ order: [['id', 'ASC']], offset: 3 }); if (OrderItem3?.setProduct) { await OrderItem3. setProduct(relatedProduct3); } const relatedProduct4 = await Products.findOne({ offset: Math.floor(Math.random() * (await Products.count())), }); const OrderItem4 = await OrderItems.findOne({ order: [['id', 'ASC']], offset: 4 }); if (OrderItem4?.setProduct) { await OrderItem4. setProduct(relatedProduct4); } } async function associateContactMessageWithAssigned_to() { const relatedAssigned_to0 = await Users.findOne({ offset: Math.floor(Math.random() * (await Users.count())), }); const ContactMessage0 = await ContactMessages.findOne({ order: [['id', 'ASC']], offset: 0 }); if (ContactMessage0?.setAssigned_to) { await ContactMessage0. setAssigned_to(relatedAssigned_to0); } const relatedAssigned_to1 = await Users.findOne({ offset: Math.floor(Math.random() * (await Users.count())), }); const ContactMessage1 = await ContactMessages.findOne({ order: [['id', 'ASC']], offset: 1 }); if (ContactMessage1?.setAssigned_to) { await ContactMessage1. setAssigned_to(relatedAssigned_to1); } const relatedAssigned_to2 = await Users.findOne({ offset: Math.floor(Math.random() * (await Users.count())), }); const ContactMessage2 = await ContactMessages.findOne({ order: [['id', 'ASC']], offset: 2 }); if (ContactMessage2?.setAssigned_to) { await ContactMessage2. setAssigned_to(relatedAssigned_to2); } const relatedAssigned_to3 = await Users.findOne({ offset: Math.floor(Math.random() * (await Users.count())), }); const ContactMessage3 = await ContactMessages.findOne({ order: [['id', 'ASC']], offset: 3 }); if (ContactMessage3?.setAssigned_to) { await ContactMessage3. setAssigned_to(relatedAssigned_to3); } const relatedAssigned_to4 = await Users.findOne({ offset: Math.floor(Math.random() * (await Users.count())), }); const ContactMessage4 = await ContactMessages.findOne({ order: [['id', 'ASC']], offset: 4 }); if (ContactMessage4?.setAssigned_to) { await ContactMessage4. setAssigned_to(relatedAssigned_to4); } } async function associateReviewWithProduct() { const relatedProduct0 = await Products.findOne({ offset: Math.floor(Math.random() * (await Products.count())), }); const Review0 = await Reviews.findOne({ order: [['id', 'ASC']], offset: 0 }); if (Review0?.setProduct) { await Review0. setProduct(relatedProduct0); } const relatedProduct1 = await Products.findOne({ offset: Math.floor(Math.random() * (await Products.count())), }); const Review1 = await Reviews.findOne({ order: [['id', 'ASC']], offset: 1 }); if (Review1?.setProduct) { await Review1. setProduct(relatedProduct1); } const relatedProduct2 = await Products.findOne({ offset: Math.floor(Math.random() * (await Products.count())), }); const Review2 = await Reviews.findOne({ order: [['id', 'ASC']], offset: 2 }); if (Review2?.setProduct) { await Review2. setProduct(relatedProduct2); } const relatedProduct3 = await Products.findOne({ offset: Math.floor(Math.random() * (await Products.count())), }); const Review3 = await Reviews.findOne({ order: [['id', 'ASC']], offset: 3 }); if (Review3?.setProduct) { await Review3. setProduct(relatedProduct3); } const relatedProduct4 = await Products.findOne({ offset: Math.floor(Math.random() * (await Products.count())), }); const Review4 = await Reviews.findOne({ order: [['id', 'ASC']], offset: 4 }); if (Review4?.setProduct) { await Review4. setProduct(relatedProduct4); } } 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); } const relatedUser3 = await Users.findOne({ offset: Math.floor(Math.random() * (await Users.count())), }); const Review3 = await Reviews.findOne({ order: [['id', 'ASC']], offset: 3 }); if (Review3?.setUser) { await Review3. setUser(relatedUser3); } const relatedUser4 = await Users.findOne({ offset: Math.floor(Math.random() * (await Users.count())), }); const Review4 = await Reviews.findOne({ order: [['id', 'ASC']], offset: 4 }); if (Review4?.setUser) { await Review4. setUser(relatedUser4); } } module.exports = { up: async (queryInterface, Sequelize) => { await Categories.bulkCreate(CategoriesData); await Products.bulkCreate(ProductsData); await Orders.bulkCreate(OrdersData); await OrderItems.bulkCreate(OrderItemsData); await ContactMessages.bulkCreate(ContactMessagesData); await SitePages.bulkCreate(SitePagesData); await BusinessPartners.bulkCreate(BusinessPartnersData); await Promotions.bulkCreate(PromotionsData); await Reviews.bulkCreate(ReviewsData); await Promise.all([ // Similar logic for "relation_many" await associateProductWithCategory(), await associateOrderWithCustomer(), await associateOrderItemWithOrder(), await associateOrderItemWithProduct(), await associateContactMessageWithAssigned_to(), await associateReviewWithProduct(), await associateReviewWithUser(), ]); }, down: async (queryInterface, Sequelize) => { await queryInterface.bulkDelete('categories', null, {}); await queryInterface.bulkDelete('products', null, {}); await queryInterface.bulkDelete('orders', null, {}); await queryInterface.bulkDelete('order_items', null, {}); await queryInterface.bulkDelete('contact_messages', null, {}); await queryInterface.bulkDelete('site_pages', null, {}); await queryInterface.bulkDelete('business_partners', null, {}); await queryInterface.bulkDelete('promotions', null, {}); await queryInterface.bulkDelete('reviews', null, {}); }, };