Files
orion/docs/getting-started/database-setup.md
Samir Boulahtit dd51df7b31 docs: reorganize migration docs into dedicated subfolder
- Create docs/development/migration/ directory
- Move database-migrations.md to migration subfolder
- Move svc-006-migration-plan.md to migration subfolder
- Update all cross-references in:
  - mkdocs.yml nav configuration
  - docs/index.md
  - docs/architecture/overview.md
  - docs/backend/overview.md
  - docs/development/contributing.md
  - docs/development/troubleshooting.md
  - docs/getting-started/database-setup.md

This separates migration plans from core documentation.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-03 22:16:05 +01:00

336 lines
8.5 KiB
Markdown

# Database Setup Guide
This guide will help new team members set up and understand the database system used in this project.
## Quick Setup (New Team Members)
After cloning the repository, follow these steps to get your database ready:
### 1. Install Dependencies
```bash
# Install all dependencies including Alembic
make install-all
```
### 2. Set Up Environment
```bash
# Copy the example environment file
cp .env.example .env
# Edit .env with your database configuration
# For development, you can use SQLite:
DATABASE_URL=sqlite:///./wizamart.db
# For PostgreSQL (recommended for production-like development):
# DATABASE_URL=postgresql://username:password@localhost:5432/ecommerce_dev
```
### 3. Run Database Migrations
```bash
# Apply all migrations to create the database schema
make migrate-up
```
### 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
```
### 6. Start Development
```bash
# Start the development server
make dev
```
## Understanding Our Database System
### What is Alembic?
Alembic is a database migration tool that helps us:
- **Version control our database schema** - Every database change is tracked
- **Share schema changes with the team** - When you pull code, you get database updates too
- **Deploy safely** - Production deployments include database updates
- **Roll back if needed** - We can undo problematic database changes
### Key Concepts
**Migrations**: Files that describe how to change the database schema
- Located in `alembic/versions/`
- Each migration has a unique ID and timestamp
- Migrations run in order to build up the complete schema
**Migration Status**: Alembic tracks which migrations have been applied
- `alembic current` - Shows the current migration
- `alembic history` - Shows all available migrations
## Daily Workflow
### When You Pull Code
```bash
# After pulling changes from git, check for new migrations
make migrate-status
# If there are pending migrations, apply them
make migrate-up
```
### When Working with Models
```bash
# After modifying SQLAlchemy models, create a migration
make migrate-create message="add_user_profile_table"
# Review the generated migration file in alembic/versions/
# Then apply it
make migrate-up
```
## Common Scenarios
### First Time Setup
```bash
make setup # This handles everything automatically
```
### Database is Out of Sync
```bash
# Check current status
make migrate-status
# Apply any missing migrations
make migrate-up
```
### Something Went Wrong
```bash
# Create a backup first
make backup-db
# Check what migrations are available
make migrate-status
# If you need to rollback the last migration
make migrate-down
```
### Starting Fresh (Development Only)
```bash
# Backup first (just in case)
make backup-db
# Delete database and recreate from scratch
del wizamart.db # or drop PostgreSQL database
make migrate-up
```
## Environment-Specific Setup
### Development (SQLite)
```env
DATABASE_URL=sqlite:///./wizamart.db
```
- Quick setup, no additional software needed
- File-based database, easy to backup/restore
- Good for local development and testing
### Development (PostgreSQL)
```env
DATABASE_URL=postgresql://user:password@localhost:5432/wizamart_dev
```
- More production-like environment
- Better for testing complex queries
- Required for certain advanced features
### Production
```env
DATABASE_URL=postgresql://user:password@production-host:5432/wizamart_prod
```
- Always use PostgreSQL in production
- Migrations are applied automatically during deployment
## Troubleshooting
### "No module named 'models'"
```bash
# Make sure you're in the project root and have activated the virtual environment
cd /path/to/project
source venv/bin/activate # or venv\Scripts\activate on Windows
```
### "Database connection failed"
```bash
# Check your DATABASE_URL in .env
# For SQLite, make sure the directory exists and is writable
# For PostgreSQL, ensure the server is running and credentials are correct
```
### "Migration conflicts"
```bash
# Check migration status
make migrate-status
# If there are conflicts, contact the team lead
# We may need to merge or reorder migrations
```
### Need Help?
- Check `make help-db` for database commands
- Use `make verify-setup` to diagnose issues
- Ask in the team chat if you're stuck
## Best Practices
1. **Always run migrations after pulling code**
2. **Never edit migration files after they're committed**
3. **Test your migrations on a copy of production data**
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
- [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/migration/database-migrations.md) - Advanced migration workflows
- [API Documentation](../api/index.md) - Start building features