278 lines
9.8 KiB
Python
278 lines
9.8 KiB
Python
"""
|
|
Seed data for the e-commerce database.
|
|
Run this script with: python seed.py
|
|
"""
|
|
|
|
from sqlalchemy.orm import Session
|
|
from app.database.database import SessionLocal, engine, Base
|
|
from app.models import Category, Product, User
|
|
from app.services.auth import get_password_hash
|
|
import json
|
|
|
|
# Create tables
|
|
Base.metadata.create_all(bind=engine)
|
|
|
|
|
|
def seed_database():
|
|
db = SessionLocal()
|
|
|
|
# Check if data already exists
|
|
if db.query(Category).first():
|
|
print("Database already seeded!")
|
|
db.close()
|
|
return
|
|
|
|
# Create categories
|
|
categories = [
|
|
Category(name="Shoes", slug="shoes", description="Footwear for all occasions"),
|
|
Category(name="Shirts", slug="shirts", description="Men's and women's shirts"),
|
|
Category(name="Pants", slug="pants", description="Trousers and jeans"),
|
|
Category(name="Hats", slug="hats", description="Caps, beanies, and more"),
|
|
Category(name="Accessories", slug="accessories", description="Belts, scarves, and more"),
|
|
]
|
|
|
|
db.add_all(categories)
|
|
db.flush()
|
|
|
|
# Create sample products (focus on shoes)
|
|
products_data = [
|
|
# Shoes
|
|
{
|
|
"name": "Premium Running Shoes",
|
|
"description": "High-performance running shoes with advanced cushioning technology",
|
|
"price": 129.99,
|
|
"discount_price": 89.99,
|
|
"category_id": 1,
|
|
"gender": "men",
|
|
"brand": "Nike",
|
|
"sizes": ["6", "7", "8", "9", "10", "11", "12", "13"],
|
|
"colors": ["Black", "White", "Blue", "Red"],
|
|
"stock": 50,
|
|
"images": ["https://via.placeholder.com/500x500?text=Running+Shoes"],
|
|
"is_featured": True,
|
|
"is_on_sale": True,
|
|
},
|
|
{
|
|
"name": "Women's Athletic Sneakers",
|
|
"description": "Comfortable and stylish sneakers for daily wear and workout",
|
|
"price": 119.99,
|
|
"discount_price": None,
|
|
"category_id": 1,
|
|
"gender": "women",
|
|
"brand": "Adidas",
|
|
"sizes": ["5", "6", "7", "8", "9", "10", "11"],
|
|
"colors": ["Pink", "Purple", "White", "Black"],
|
|
"stock": 35,
|
|
"images": ["https://via.placeholder.com/500x500?text=Womens+Sneakers"],
|
|
"is_featured": True,
|
|
"is_on_sale": False,
|
|
},
|
|
{
|
|
"name": "Casual Leather Loafers",
|
|
"description": "Elegant leather loafers perfect for office or casual outings",
|
|
"price": 159.99,
|
|
"discount_price": 129.99,
|
|
"category_id": 1,
|
|
"gender": "men",
|
|
"brand": "Cole Haan",
|
|
"sizes": ["7", "8", "9", "10", "11", "12", "13"],
|
|
"colors": ["Brown", "Black", "Tan"],
|
|
"stock": 25,
|
|
"images": ["https://via.placeholder.com/500x500?text=Loafers"],
|
|
"is_featured": True,
|
|
"is_on_sale": True,
|
|
},
|
|
{
|
|
"name": "Summer Flip Flops",
|
|
"description": "Comfortable flip flops for beach and casual summer wear",
|
|
"price": 29.99,
|
|
"discount_price": 19.99,
|
|
"category_id": 1,
|
|
"gender": "women",
|
|
"brand": "Havaianas",
|
|
"sizes": ["6", "7", "8", "9", "10"],
|
|
"colors": ["Turquoise", "Pink", "Yellow", "White"],
|
|
"stock": 100,
|
|
"images": ["https://via.placeholder.com/500x500?text=Flip+Flops"],
|
|
"is_featured": False,
|
|
"is_on_sale": True,
|
|
},
|
|
{
|
|
"name": "Basketball High Tops",
|
|
"description": "Professional basketball shoes with superior ankle support",
|
|
"price": 179.99,
|
|
"discount_price": 149.99,
|
|
"category_id": 1,
|
|
"gender": "men",
|
|
"brand": "Jordan",
|
|
"sizes": ["7", "8", "9", "10", "11", "12", "13", "14"],
|
|
"colors": ["Black", "Red", "White", "Gold"],
|
|
"stock": 40,
|
|
"images": ["https://via.placeholder.com/500x500?text=Basketball+Shoes"],
|
|
"is_featured": True,
|
|
"is_on_sale": False,
|
|
},
|
|
{
|
|
"name": "Hiking Boot Pro",
|
|
"description": "Durable hiking boots with waterproof protection and excellent grip",
|
|
"price": 189.99,
|
|
"discount_price": 149.99,
|
|
"category_id": 1,
|
|
"gender": "men",
|
|
"brand": "Salomon",
|
|
"sizes": ["6", "7", "8", "9", "10", "11", "12", "13"],
|
|
"colors": ["Brown", "Gray", "Black"],
|
|
"stock": 30,
|
|
"images": ["https://via.placeholder.com/500x500?text=Hiking+Boots"],
|
|
"is_featured": True,
|
|
"is_on_sale": True,
|
|
},
|
|
{
|
|
"name": "Evening Heels",
|
|
"description": "Elegant high heels for special occasions",
|
|
"price": 139.99,
|
|
"discount_price": None,
|
|
"category_id": 1,
|
|
"gender": "women",
|
|
"brand": "Jimmy Choo",
|
|
"sizes": ["5", "6", "7", "8", "9", "10"],
|
|
"colors": ["Black", "Silver", "Gold", "Red"],
|
|
"stock": 20,
|
|
"images": ["https://via.placeholder.com/500x500?text=Evening+Heels"],
|
|
"is_featured": False,
|
|
"is_on_sale": False,
|
|
},
|
|
{
|
|
"name": "Casual Canvas Shoes",
|
|
"description": "Lightweight canvas shoes perfect for everyday casual wear",
|
|
"price": 59.99,
|
|
"discount_price": 39.99,
|
|
"category_id": 1,
|
|
"gender": "men",
|
|
"brand": "Vans",
|
|
"sizes": ["6", "7", "8", "9", "10", "11", "12", "13"],
|
|
"colors": ["White", "Black", "Blue", "Red"],
|
|
"stock": 60,
|
|
"images": ["https://via.placeholder.com/500x500?text=Canvas+Shoes"],
|
|
"is_featured": False,
|
|
"is_on_sale": True,
|
|
},
|
|
# Shirts
|
|
{
|
|
"name": "Classic Cotton T-Shirt",
|
|
"description": "High-quality cotton t-shirt comfortable for everyday wear",
|
|
"price": 29.99,
|
|
"discount_price": None,
|
|
"category_id": 2,
|
|
"gender": "men",
|
|
"brand": "Gap",
|
|
"sizes": ["XS", "S", "M", "L", "XL", "XXL"],
|
|
"colors": ["White", "Black", "Blue", "Gray"],
|
|
"stock": 80,
|
|
"images": ["https://via.placeholder.com/500x500?text=T-Shirt"],
|
|
"is_featured": False,
|
|
"is_on_sale": False,
|
|
},
|
|
{
|
|
"name": "Silk Blouse",
|
|
"description": "Elegant silk blouse for professional and casual occasions",
|
|
"price": 89.99,
|
|
"discount_price": 59.99,
|
|
"category_id": 2,
|
|
"gender": "women",
|
|
"brand": "Hugo Boss",
|
|
"sizes": ["XS", "S", "M", "L", "XL"],
|
|
"colors": ["White", "Black", "Blue", "Burgundy"],
|
|
"stock": 25,
|
|
"images": ["https://via.placeholder.com/500x500?text=Blouse"],
|
|
"is_featured": True,
|
|
"is_on_sale": True,
|
|
},
|
|
# Pants
|
|
{
|
|
"name": "Slim Fit Jeans",
|
|
"description": "Modern slim fit jeans with stretch comfort",
|
|
"price": 79.99,
|
|
"discount_price": 59.99,
|
|
"category_id": 3,
|
|
"gender": "men",
|
|
"brand": "Levi's",
|
|
"sizes": ["28", "30", "32", "34", "36", "38", "40"],
|
|
"colors": ["Dark Blue", "Light Blue", "Black"],
|
|
"stock": 50,
|
|
"images": ["https://via.placeholder.com/500x500?text=Jeans"],
|
|
"is_featured": False,
|
|
"is_on_sale": True,
|
|
},
|
|
{
|
|
"name": "Yoga Leggings",
|
|
"description": "High-waist yoga leggings with moisture-wicking fabric",
|
|
"price": 69.99,
|
|
"discount_price": None,
|
|
"category_id": 3,
|
|
"gender": "women",
|
|
"brand": "Lululemon",
|
|
"sizes": ["XS", "S", "M", "L", "XL"],
|
|
"colors": ["Black", "Navy", "Burgundy", "Gray"],
|
|
"stock": 35,
|
|
"images": ["https://via.placeholder.com/500x500?text=Leggings"],
|
|
"is_featured": True,
|
|
"is_on_sale": False,
|
|
},
|
|
]
|
|
|
|
for product_data in products_data:
|
|
product = Product(
|
|
name=product_data["name"],
|
|
description=product_data["description"],
|
|
price=product_data["price"],
|
|
discount_price=product_data["discount_price"],
|
|
category_id=product_data["category_id"],
|
|
gender=product_data["gender"],
|
|
brand=product_data["brand"],
|
|
sizes=product_data["sizes"],
|
|
colors=product_data["colors"],
|
|
stock=product_data["stock"],
|
|
images=product_data["images"],
|
|
is_featured=product_data["is_featured"],
|
|
is_on_sale=product_data["is_on_sale"],
|
|
)
|
|
db.add(product)
|
|
|
|
# Create sample users
|
|
sample_users = [
|
|
User(
|
|
email="user@example.com",
|
|
full_name="John Doe",
|
|
hashed_password=get_password_hash("password123"),
|
|
phone="+1234567890",
|
|
address="123 Main St",
|
|
city="New York",
|
|
postal_code="10001",
|
|
country="USA",
|
|
),
|
|
User(
|
|
email="jane@example.com",
|
|
full_name="Jane Smith",
|
|
hashed_password=get_password_hash("password123"),
|
|
phone="+0987654321",
|
|
address="456 Oak Ave",
|
|
city="Los Angeles",
|
|
postal_code="90001",
|
|
country="USA",
|
|
),
|
|
]
|
|
|
|
db.add_all(sample_users)
|
|
|
|
db.commit()
|
|
print("Database seeded successfully!")
|
|
print(f"Created {len(categories)} categories")
|
|
print(f"Created {len(products_data)} products")
|
|
print(f"Created {len(sample_users)} users")
|
|
db.close()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
seed_database()
|