diff --git a/docs/getting-started/database-setup.md b/docs/getting-started/database-setup.md index fb8ec009..22d73d0d 100644 --- a/docs/getting-started/database-setup.md +++ b/docs/getting-started/database-setup.md @@ -31,13 +31,25 @@ DATABASE_URL=sqlite:///./ecommerce.db make migrate-up ``` -### 4. Verify Setup +### 4. Seed Test Data (Optional) +```bash +# Create test vendors, products, and inventory +python scripts/create_test_data.py + +# Create inventory entries for existing products +python scripts/create_inventory.py + +# Create landing pages for vendors +python scripts/create_landing_page.py +``` + +### 5. Verify Setup ```bash # Check that everything is working make verify-setup ``` -### 5. Start Development +### 6. Start Development ```bash # Start the development server make dev @@ -185,8 +197,139 @@ make migrate-status 4. **Include meaningful messages when creating migrations** 5. **Review generated migrations before applying them** +## Data Seeding for Development + +### Overview + +After setting up your database schema with migrations, you'll need test data to develop and test features. We provide several scripts to populate your database with sample data. + +### Available Seeding Scripts + +#### 1. Create Test Data +**Script:** `scripts/create_test_data.py` + +Creates complete test data including vendors, marketplace products, vendor products, themes, and content pages. + +```bash +python scripts/create_test_data.py +``` + +**What it creates:** +- 3 test vendors (WizaMart, Fashion Hub, The Book Store) +- 20 marketplace products per vendor +- Vendor-specific products with pricing +- Vendor themes with custom colors +- Sample CMS content pages (About, Contact, FAQ, etc.) + +#### 2. Create Inventory Entries +**Script:** `scripts/create_inventory.py` + +Creates inventory entries for products that don't have inventory. This is **required** for the shop to function properly, as products with 0 inventory cannot be added to cart. + +```bash +python scripts/create_inventory.py +``` + +**What it does:** +- Finds all products without inventory entries +- Creates inventory record for each product +- Sets 100 units available in "Main Warehouse" +- Can be run multiple times (only creates missing entries) + +**Why it's needed:** +- Product `available_inventory` is calculated from inventory entries +- Empty inventory table = 0 inventory for all products +- Add to cart functionality requires `available_inventory > 0` + +#### 3. Create Landing Pages +**Script:** `scripts/create_landing_page.py` + +Creates or updates landing pages for vendors with different templates. + +```bash +# Interactive mode +python scripts/create_landing_page.py + +# Or programmatically in Python +from scripts.create_landing_page import create_landing_page +create_landing_page('wizamart', template='modern') +``` + +**Available templates:** +- `default` - Clean professional layout with 3-column quick links +- `minimal` - Ultra-simple centered design with single CTA +- `modern` - Full-screen hero with animations and features +- `full` - Maximum features with split-screen hero and stats + +### Complete Setup Workflow + +For a fresh development environment with test data: + +```bash +# 1. Setup database schema +make migrate-up + +# 2. Create test vendors and products +python scripts/create_test_data.py + +# 3. Create inventory (REQUIRED for shop to work) +python scripts/create_inventory.py + +# 4. Create landing pages +python scripts/create_landing_page.py +# Follow interactive prompts to create landing pages + +# 5. Start the server +make dev + +# 6. Test the shop +# Visit: http://localhost:8000/vendors/wizamart/shop/ +``` + +### Common Issues + +**Problem: Products can't be added to cart** +```bash +# Solution: Create inventory entries +python scripts/create_inventory.py +``` + +**Problem: Landing page shows 404** +```bash +# Solution: Create landing page for the vendor +python scripts/create_landing_page.py +# OR the vendor will auto-redirect to /shop/ +``` + +**Problem: No products showing in shop** +```bash +# Solution: Create test data +python scripts/create_test_data.py +``` + +### Database Reset (Development Only) + +To start completely fresh: + +```bash +# 1. Backup first (optional but recommended) +cp wizamart.db wizamart.db.backup + +# 2. Delete database +rm wizamart.db + +# 3. Recreate schema +make migrate-up + +# 4. Seed all data +python scripts/create_test_data.py +python scripts/create_inventory.py +python scripts/create_landing_page.py +``` + ## Next Steps -- [Database Setup Guide](DATABASE_SETUP_GUIDE.md) - Complete database setup guide +- [Shop Setup Guide](../guides/shop-setup.md) - Configure vendor storefronts +- [Landing Pages Guide](../features/vendor-landing-pages.md) - Customize landing pages - [Database Migrations Guide](../development/database-migrations.md) - Advanced migration workflows - [API Documentation](../api/index.md) - Start building features diff --git a/docs/troubleshooting/shop-frontend.md b/docs/troubleshooting/shop-frontend.md new file mode 100644 index 00000000..0b9f9e4e --- /dev/null +++ b/docs/troubleshooting/shop-frontend.md @@ -0,0 +1,393 @@ +# Shop Frontend Troubleshooting + +Common issues and solutions for the vendor shop frontend. + +## Cart and Product Issues + +### Products Cannot Be Added to Cart + +**Symptoms:** +- "Add to Cart" button is disabled +- No response when clicking "Add to Cart" +- Console shows `canAddToCart: false` + +**Root Cause:** +Products have `available_inventory: 0` because the `inventory` table is empty. + +**How it Works:** +- Product's `available_inventory` is a calculated property +- It sums `quantity - reserved_quantity` from all `inventory_entries` +- If there are no inventory entries, `available_inventory` = 0 +- The `canAddToCart` check fails when `available_inventory <= 0` + +**Solution:** +```bash +# Create inventory entries for all products +python scripts/create_inventory.py +``` + +This script: +- Finds all products without inventory entries +- Creates inventory with 100 units in "Main Warehouse" +- Can be run multiple times (only creates missing entries) + +**Verify Fix:** +```python +# Check a product's inventory +from app.core.database import SessionLocal +from models.database.product import Product + +db = SessionLocal() +product = db.query(Product).first() +print(f"Available inventory: {product.available_inventory}") +# Should show: Available inventory: 100 +``` + +### Cart is Empty After Adding Products + +**Symptoms:** +- Success toast appears: "1 item(s) added to cart!" +- Cart count in header doesn't update +- Cart page shows 0 items +- Console shows `session_1234_abc` but API returns empty cart + +**Root Cause:** +Session ID not properly initialized in Alpine.js components. + +**How it Works:** +- Cart uses session ID stored in localStorage as `cart_session_id` +- `shopLayoutData()` base component initializes `sessionId` in its `init()` method +- Child components (product, cart) must call parent `init()` to get `sessionId` +- If parent init isn't called, `sessionId` is `undefined` + +**Solution Already Implemented:** +The product and cart pages now properly call parent init: + +```javascript +// In product.html and cart.html +async init() { + // Call parent init to set up sessionId + if (baseData.init) { + baseData.init.call(this); + } + // Now sessionId is available + await this.loadCart(); +} +``` + +**Verify Fix:** +Open browser console and check for: +``` +🔍 [SHOP] Session ID: session_1763765104510_zc866tt5d +``` + +If you see `undefined`, the parent init isn't being called properly. + +## Styling and Layout Issues + +### Page Has No Styling / CSS 404 Errors + +**Symptoms:** +- Page displays with no styling +- Console shows 404 errors: + - `/static/css/shared/base.css` not found + - `/static/css/vendor/vendor.css` not found +- Page is just plain HTML + +**Root Cause:** +Template doesn't extend `shop/base.html` and has hardcoded non-existent CSS references. + +**How it Works:** +- All shop pages should extend `shop/base.html` +- Base template includes Tailwind CSS and shop styles +- Standalone HTML pages with `` tags won't work + +**Solution:** +Refactor template to extend base: + +```jinja2 +{# BEFORE: Standalone HTML #} + + +
+ ❌ + + + + + + +{# AFTER: Extends base #} +{% extends "shop/base.html" %} + +{% block title %}My Page{% endblock %} + +{% block alpine_data %}myComponent(){% endblock %} + +{% block content %} + +{% endblock %} +``` + +**Templates Already Fixed:** +- ✅ `shop/product.html` - Refactored to extend base +- ✅ `shop/cart.html` - Refactored to extend base +- ✅ `shop/products.html` - Already extends base +- ✅ `shop/home.html` - Already extends base + +### Images Not Loading / Placeholder Not Showing + +**Symptoms:** +- Product images show broken image icon +- Console shows 404: `/static/shop/img/placeholder.jpg` +- OR images point to fake URLs like `https://wizamart.example.com/images/product-1.jpg` + +**Root Cause:** +1. Test data has fake image URLs +2. Placeholder file was `.jpg` but contained SVG content + +**How it Works:** +- Products have `marketplace_product.image_link` URLs +- Template uses fallback: `:src="image || '/static/shop/img/placeholder.svg'"` +- `@error` handler switches to placeholder when image fails to load +- Browsers won't render SVG content from `.jpg` files + +**Solution Already Implemented:** +- Created proper `/static/shop/img/placeholder.svg` +- Added `@error` handlers to all image tags: + +```html +