KillerKing93/Transformers-TextEngine-OpenAPI
0
1#!/usr/bin/env python2# -*- coding: utf-8 -*-3"""4Sample data seeding script for AI Marketplace Platform5 6Usage:7 python seed_data.py8 9This script populates the database with sample suppliers, products, and users10for testing and demonstration purposes.11"""12 13import os14import sys15from datetime import datetime16 17# Ensure we can import from the current directory18sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))19 20from database import SessionLocal, init_db21from models import Supplier, Product, User22 23 24def seed_database():25 """Seed the database with sample data."""26 27 print("[Seed] Initializing database...")28 init_db()29 30 db = SessionLocal()31 32 try:33 # Check if data already exists34 existing_suppliers = db.query(Supplier).count()35 if existing_suppliers > 0:36 print(f"[Seed] Database already has {existing_suppliers} suppliers. Skipping seed.")37 response = input("Do you want to clear and re-seed? (yes/no): ")38 if response.lower() != "yes":39 print("[Seed] Aborted.")40 return41 else:42 # Clear existing data43 print("[Seed] Clearing existing data...")44 db.query(Product).delete()45 db.query(Supplier).delete()46 db.query(User).delete()47 db.commit()48 print("[Seed] Cleared.")49 50 # Seed Suppliers51 print("[Seed] Creating suppliers...")52 53 suppliers_data = [54 {55 "name": "Budi Santoso",56 "business_name": "Toko Komputer Jakarta",57 "email": "budi@tokokomputer.com",58 "phone": "+62812345678",59 "address": "Jl. Sudirman No. 123, Jakarta Pusat",60 "latitude": -6.2088,61 "longitude": 106.8456,62 "city": "Jakarta",63 "province": "DKI Jakarta"64 },65 {66 "name": "Siti Rahma",67 "business_name": "Elektronik Bandung",68 "email": "siti@elektronikbdg.com",69 "phone": "+62856789012",70 "address": "Jl. Braga No. 45, Bandung",71 "latitude": -6.9175,72 "longitude": 107.6191,73 "city": "Bandung",74 "province": "Jawa Barat"75 },76 {77 "name": "Ahmad Fauzi",78 "business_name": "Tech Store Surabaya",79 "email": "ahmad@techstoresby.com",80 "phone": "+62877123456",81 "address": "Jl. Tunjungan No. 88, Surabaya",82 "latitude": -7.2575,83 "longitude": 112.7521,84 "city": "Surabaya",85 "province": "Jawa Timur"86 },87 {88 "name": "Dewi Lestari",89 "business_name": "Gadget Center Jakarta Selatan",90 "email": "dewi@gadgetcenter.com",91 "phone": "+62899887766",92 "address": "Jl. Fatmawati No. 200, Jakarta Selatan",93 "latitude": -6.2910,94 "longitude": 106.7968,95 "city": "Jakarta Selatan",96 "province": "DKI Jakarta"97 },98 {99 "name": "Rudi Hartono",100 "business_name": "Computer World Medan",101 "email": "rudi@computerworld.com",102 "phone": "+62811223344",103 "address": "Jl. Gatot Subroto No. 100, Medan",104 "latitude": 3.5952,105 "longitude": 98.6722,106 "city": "Medan",107 "province": "Sumatera Utara"108 }109 ]110 111 suppliers = []112 for data in suppliers_data:113 supplier = Supplier(**data)114 db.add(supplier)115 suppliers.append(supplier)116 117 db.commit()118 print(f"[Seed] Created {len(suppliers)} suppliers")119 120 # Seed Products121 print("[Seed] Creating products...")122 123 products_data = [124 # Jakarta - Toko Komputer125 {126 "supplier": suppliers[0],127 "name": "Laptop ASUS ROG Strix G15",128 "description": "Gaming laptop with RTX 4060, Ryzen 7 6800H, 16GB RAM, 512GB SSD",129 "price": 15999000,130 "stock_quantity": 5,131 "category": "laptop",132 "tags": "gaming,asus,ryzen,rtx",133 "sku": "ASU-ROG-G15-001"134 },135 {136 "supplier": suppliers[0],137 "name": "Monitor LG 27' 4K UHD",138 "description": "27 inch 4K monitor, IPS panel, HDR10 support",139 "price": 4500000,140 "stock_quantity": 10,141 "category": "monitor",142 "tags": "monitor,lg,4k,hdr",143 "sku": "LG-MON-27-4K"144 },145 {146 "supplier": suppliers[0],147 "name": "Keyboard Mechanical Logitech G Pro",148 "description": "TKL mechanical keyboard with GX Blue switches",149 "price": 1850000,150 "stock_quantity": 15,151 "category": "keyboard",152 "tags": "keyboard,logitech,mechanical,gaming",153 "sku": "LOG-KEY-GPR"154 },155 # Bandung - Elektronik156 {157 "supplier": suppliers[1],158 "name": "Laptop Lenovo ThinkPad X1 Carbon",159 "description": "Business laptop, Intel i7-1365U, 16GB RAM, 512GB SSD, 14 inch",160 "price": 22500000,161 "stock_quantity": 3,162 "category": "laptop",163 "tags": "business,lenovo,thinkpad,intel",164 "sku": "LEN-X1C-G11"165 },166 {167 "supplier": suppliers[1],168 "name": "Smartphone Samsung Galaxy S24",169 "description": "Flagship smartphone, Snapdragon 8 Gen 3, 8GB RAM, 256GB",170 "price": 13999000,171 "stock_quantity": 8,172 "category": "smartphone",173 "tags": "smartphone,samsung,flagship",174 "sku": "SAM-S24-256"175 },176 {177 "supplier": suppliers[1],178 "name": "Tablet iPad Air M2",179 "description": "11 inch iPad Air with M2 chip, 128GB WiFi",180 "price": 9499000,181 "stock_quantity": 6,182 "category": "tablet",183 "tags": "tablet,ipad,apple,m2",184 "sku": "APL-IPA-M2-128"185 },186 # Surabaya - Tech Store187 {188 "supplier": suppliers[2],189 "name": "Laptop HP Pavilion Gaming",190 "description": "Gaming laptop, Intel i5-12500H, RTX 3050, 16GB RAM, 512GB SSD",191 "price": 11999000,192 "stock_quantity": 7,193 "category": "laptop",194 "tags": "gaming,hp,intel,rtx3050",195 "sku": "HP-PAV-GAM-001"196 },197 {198 "supplier": suppliers[2],199 "name": "Mouse Logitech G502 HERO",200 "description": "Gaming mouse with 25K DPI sensor, customizable weights",201 "price": 550000,202 "stock_quantity": 20,203 "category": "mouse",204 "tags": "mouse,logitech,gaming",205 "sku": "LOG-G502-HERO"206 },207 {208 "supplier": suppliers[2],209 "name": "Printer Epson EcoTank L3250",210 "description": "All-in-one printer with WiFi, scanner, copier",211 "price": 2850000,212 "stock_quantity": 5,213 "category": "printer",214 "tags": "printer,epson,ecotank,wifi",215 "sku": "EPS-L3250-ECO"216 },217 # Jakarta Selatan - Gadget Center218 {219 "supplier": suppliers[3],220 "name": "Laptop MacBook Air M3",221 "description": "13 inch MacBook Air, M3 chip, 8GB RAM, 256GB SSD",222 "price": 17999000,223 "stock_quantity": 4,224 "category": "laptop",225 "tags": "laptop,apple,macbook,m3",226 "sku": "APL-MBA-M3-256"227 },228 {229 "supplier": suppliers[3],230 "name": "Smartphone iPhone 15 Pro",231 "description": "Pro smartphone with A17 Pro chip, 128GB, Titanium",232 "price": 19999000,233 "stock_quantity": 5,234 "category": "smartphone",235 "tags": "smartphone,iphone,apple,pro",236 "sku": "APL-IP15P-128"237 },238 {239 "supplier": suppliers[3],240 "name": "Monitor Samsung Odyssey G7",241 "description": "32 inch curved gaming monitor, 240Hz, 1440p, QLED",242 "price": 8999000,243 "stock_quantity": 3,244 "category": "monitor",245 "tags": "monitor,samsung,gaming,curved,240hz",246 "sku": "SAM-ODY-G7-32"247 },248 # Medan - Computer World249 {250 "supplier": suppliers[4],251 "name": "Laptop Acer Aspire 5",252 "description": "Budget laptop, Intel i5-1235U, 8GB RAM, 512GB SSD, 15.6 inch",253 "price": 7999000,254 "stock_quantity": 12,255 "category": "laptop",256 "tags": "laptop,acer,budget,intel",257 "sku": "ACR-ASP5-I5"258 },259 {260 "supplier": suppliers[4],261 "name": "Smartphone Xiaomi Redmi Note 13 Pro",262 "description": "Mid-range smartphone, Snapdragon 7s Gen 2, 8GB RAM, 256GB",263 "price": 4299000,264 "stock_quantity": 15,265 "category": "smartphone",266 "tags": "smartphone,xiaomi,redmi,midrange",267 "sku": "XIA-RN13P-256"268 },269 {270 "supplier": suppliers[4],271 "name": "Keyboard Razer BlackWidow V3",272 "description": "Full-size mechanical keyboard, Razer Green switches, RGB",273 "price": 1550000,274 "stock_quantity": 8,275 "category": "keyboard",276 "tags": "keyboard,razer,mechanical,rgb",277 "sku": "RAZ-BW-V3"278 }279 ]280 281 for data in products_data:282 supplier = data.pop("supplier")283 product = Product(supplier_id=supplier.id, **data)284 db.add(product)285 286 db.commit()287 print(f"[Seed] Created {len(products_data)} products")288 289 # Seed Users290 print("[Seed] Creating users...")291 292 users_data = [293 {294 "name": "John Doe",295 "email": "john.doe@email.com",296 "phone": "+62812111222",297 "latitude": -6.2088,298 "longitude": 106.8456,299 "city": "Jakarta",300 "province": "DKI Jakarta",301 "ai_access_enabled": True # Premium user302 },303 {304 "name": "Jane Smith",305 "email": "jane.smith@email.com",306 "phone": "+62856333444",307 "latitude": -6.9175,308 "longitude": 107.6191,309 "city": "Bandung",310 "province": "Jawa Barat",311 "ai_access_enabled": True # Premium user312 },313 {314 "name": "Bob Wilson",315 "email": "bob.wilson@email.com",316 "phone": "+62877555666",317 "latitude": -7.2575,318 "longitude": 112.7521,319 "city": "Surabaya",320 "province": "Jawa Timur",321 "ai_access_enabled": False # Regular user322 }323 ]324 325 for data in users_data:326 user = User(**data)327 db.add(user)328 329 db.commit()330 print(f"[Seed] Created {len(users_data)} users")331 332 print("\n[Seed] ✅ Database seeding completed successfully!")333 print("\n[Seed] Summary:")334 print(f" - Suppliers: {len(suppliers)}")335 print(f" - Products: {len(products_data)}")336 print(f" - Users: {len(users_data)}")337 print("\n[Seed] Sample data:")338 print(" User with AI access:")339 print(f" - Email: john.doe@email.com (user_id: 1, Jakarta)")340 print(f" - Email: jane.smith@email.com (user_id: 2, Bandung)")341 print("\n Try AI search:")342 print(' curl -X POST http://localhost:3000/api/chat/search \\')343 print(' -H "Content-Type: application/json" \\')344 print(' -d \'{"user_id": 1, "query": "laptop gaming Jakarta budget 12 juta"}\'')345 346 except Exception as e:347 print(f"[Seed] ❌ Error during seeding: {e}")348 db.rollback()349 raise350 finally:351 db.close()352 353 354if __name__ == "__main__":355 seed_database()356 