13 KiB
13 KiB
Multi-Tenant Ecommerce Platform with Marketplace Integration
Project Overview
This document outlines the comprehensive architecture for a state-of-the-art multi-tenant ecommerce platform that enables vendors to operate independent webshops while integrating with external marketplaces. The platform implements complete vendor isolation with self-service capabilities and marketplace product imports.
Core Architecture
Technology Stack
- Backend: Python FastAPI with PostgreSQL
- Frontend: Vanilla HTML, CSS, JavaScript with AJAX
- Deployment: Docker with environment-based configuration
- Authentication: JWT-based with role-based access control
Multi-Tenancy Model
The platform operates on a complete vendor isolation principle where:
- Each vendor has their own independent webshop
- Full Chinese wall between vendors (no data sharing)
- Vendors can manage their own teams with granular permissions
- Self-service marketplace integration capabilities
System Architecture
1. Application Structure
app/
├── admin/ # Super admin functionality
│ ├── models.py # Super admin, vendor bulk operations
│ ├── routers.py # Admin endpoints
│ ├── services/
│ │ ├── vendor_importer.py # Bulk vendor CSV import
│ │ └── admin_auth.py # Super admin authentication
│ └── tasks.py # Background bulk operations
├── auth/ # Authentication & authorization
│ ├── models.py # Users, roles, permissions
│ ├── routers.py # Team member auth
│ ├── services/
│ │ ├── permissions.py # Role-based access control
│ │ └── invitations.py # Team member invites
│ └── middleware.py # User + vendor context
├── teams/ # Team management
│ ├── models.py # Team management models
│ ├── routers.py # Team CRUD operations
│ └── services.py # Team operations
├── marketplace/ # Marketplace integrations
│ ├── models.py # Import jobs, marketplace configs
│ ├── services/
│ │ ├── letzshop.py # Letzshop CSV processor
│ │ └── importer.py # Generic import orchestrator
│ ├── routers.py # Import management endpoints
│ └── tasks.py # Background import jobs
├── ecommerce/ # Core business logic
│ ├── models.py # Products, orders, customers
│ ├── routers/
│ │ ├── products.py # Product catalog management
│ │ ├── orders.py # Order processing
│ │ └── customers.py # Customer management
│ └── services/ # Business logic services
└── shared/ # Common utilities
├── database.py # Database configuration
├── models.py # Shared base models
└── utils.py # Common utilities
2. Data Models
Core Models
# Vendor Management
class Vendor(BaseModel):
id: int
name: str
subdomain: str
owner_user_id: int
business_address: str
business_email: str
business_phone: str
letzshop_csv_url: Optional[str]
theme_config: dict
is_active: bool = True
created_at: datetime
# User Management
class User(BaseModel):
id: int
email: str
first_name: str
last_name: str
hashed_password: str
is_active: bool = True
created_at: datetime
# Team Management
class VendorUser(BaseModel):
id: int
vendor_id: int
user_id: int
role_id: int
invited_by: int
is_active: bool = True
class Role(BaseModel):
id: int
vendor_id: int
name: str # "Owner", "Manager", "Editor", "Viewer"
permissions: List[str] # ["products.create", "orders.view", etc.]
# Product Management
class Product(BaseModel):
id: int
vendor_id: int
sku: str
name: str
price: Decimal
imported_product_id: Optional[int]
custom_description: Optional[str]
custom_price: Optional[Decimal]
class ImportedProduct(BaseModel):
id: int
vendor_id: int
import_job_id: int
external_sku: str
raw_data: dict
is_selected: bool = False
is_published: bool = False
User Roles & Permissions
Role Hierarchy
- Super Admin: Platform-level administration
- Vendor Owner: Full vendor control including team management
- Vendor Manager: Operational management without team control
- Vendor Editor: Product and order management
- Vendor Viewer: Read-only access
Permission System
DEFAULT_ROLES = {
"Owner": [
"team.manage", "team.invite", "team.remove",
"products.create", "products.edit", "products.delete", "products.view",
"orders.create", "orders.edit", "orders.view",
"imports.trigger", "imports.view", "imports.configure",
"settings.edit", "analytics.view"
],
"Manager": [
"team.invite", "team.view",
"products.create", "products.edit", "products.view",
"orders.create", "orders.edit", "orders.view",
"imports.trigger", "imports.view",
"analytics.view"
],
"Editor": [
"products.create", "products.edit", "products.view",
"orders.view", "orders.edit",
"imports.view"
],
"Viewer": [
"products.view", "orders.view", "imports.view"
]
}
Marketplace Integration
Current Integration: Letzshop
- Import Method: CSV file processing (one file per language per vendor)
- Data Handling: Complete import of all CSV data into staging area
- Vendor Control: Vendors select which products to publish to their catalog
- Override Capability: Vendors can modify prices, descriptions, and other attributes
Import Workflow
- Configuration: Vendors provide their Letzshop CSV URLs
- Import Execution: System downloads and processes CSV files
- Product Staging: All products imported to
ImportedProducttable - Vendor Selection: Vendors browse and select products to publish
- Catalog Integration: Selected products become active
Productentries - Customization: Vendors can override imported data
Import Models
class ImportJob(BaseModel):
id: int
vendor_id: int
marketplace: str = "letzshop"
csv_url: str
status: ImportStatus
total_products: int
imported_at: datetime
class ImportConfiguration(BaseModel):
vendor_id: int
marketplace: str
config: dict # CSV URLs, mapping rules
is_active: bool
Team Management System
Team Invitation Flow
- Invitation Creation: Owner/Manager invites team member via email
- Secure Token Generation: Cryptographically secure invitation tokens
- Email Notification: Invitation email with acceptance link
- User Registration: New users create account or existing users join team
- Role Assignment: Automatic role assignment based on invitation
- Access Activation: Immediate access to vendor resources
Multi-Vendor Users
- Users can be members of multiple vendor teams
- Context switching between vendor environments
- Isolated permissions per vendor relationship
Super Admin Capabilities
Vendor Management
- Bulk Import: CSV-based vendor creation with owner details
- Individual Management: Create, edit, deactivate vendors
- Team Oversight: View all teams across vendors
- System Monitoring: Import job monitoring, system health
Bulk Import Format
vendor_name,subdomain,owner_name,owner_email,owner_phone,business_address,business_city,business_postal_code,business_country,letzshop_csv_url,initial_password
Admin Features
- Vendor CRUD operations
- Mass password resets
- System-wide import monitoring
- Audit logging
- Analytics dashboard
Frontend Architecture
Multi-Tenant Single Application
- Single Codebase: One frontend serving all vendors
- Dynamic Theming: Vendor-specific customization
- Context Detection: Automatic vendor identification
- Role-Based UI: Permission-driven interface elements
Application Structure
ecommerce_frontend/
├── vendor/ # Vendor admin interface
│ ├── dashboard.html
│ ├── products.html
│ ├── orders.html
│ ├── team.html
│ ├── imports.html
│ └── settings.html
├── shop/ # Customer-facing shop
│ ├── home.html
│ ├── products.html
│ ├── cart.html
│ └── checkout.html
├── css/
│ ├── vendor/ # Admin styles
│ ├── shop/ # Shop styles
│ └── themes/ # Vendor themes
└── js/
├── vendor/ # Admin logic
├── shop/ # Shop functionality
└── shared/ # Common utilities
Vendor Context Detection
- Subdomain-based:
vendor1.platform.com(Production) - Path-based:
platform.com/vendor/vendor1(Development) - Custom Domain:
vendor-custom.com(Enterprise)
Deployment Strategy
Environment Configuration
- Development: Path-based routing, debug enabled
- Staging: Subdomain-based, testing features
- Production: Subdomain + custom domains, optimized performance
Single Build Deployment
- Environment-agnostic build artifacts
- Runtime configuration injection
- Dynamic vendor context resolution
- Theme and feature adaptation
Configuration Flow
- Build Phase: Create environment-neutral assets
- Deployment: Environment-specific configuration injection
- Runtime: Vendor context detection and configuration loading
- Customization: Dynamic theme and feature application
API Structure
Vendor-Scoped Endpoints
/api/v1/
├── auth/
│ ├── POST /login # Universal login
│ └── POST /register # Accept invitations
├── teams/
│ ├── GET /members # Team management
│ ├── POST /invite # Invite members
│ └── PUT /members/{id} # Update roles
├── products/
│ ├── GET / # Vendor catalog
│ ├── POST / # Create products
│ └── POST /from-import/{id} # Import from marketplace
├── marketplace/
│ ├── POST /import # Trigger imports
│ ├── GET /imports # Import history
│ └── GET /imports/{id}/products # Browse imported products
└── orders/
├── GET / # Order management
└── POST / # Create orders
Admin Endpoints
/api/v1/admin/
├── vendors/
│ ├── GET / # List vendors
│ ├── POST /bulk-import # Bulk vendor creation
│ └── PUT /{id} # Edit vendor
├── marketplace/
│ ├── GET /import-jobs # System-wide import monitoring
│ └── POST /trigger-imports # Mass import trigger
└── system/
├── GET /health # System health
└── GET /analytics # Platform analytics
Security Features
Authentication & Authorization
- JWT-based authentication with refresh tokens
- Role-based access control with granular permissions
- Vendor-scoped data access with automatic filtering
- Secure invitation system with expiring tokens
Data Isolation
- Complete vendor data separation at database level
- Automatic vendor ID injection in all queries
- Permission verification on all operations
- Audit logging for admin actions
Security Middleware
async def vendor_context_middleware(request: Request):
# Extract vendor context
# Validate user permissions
# Inject vendor ID in request state
# Ensure data isolation
Current Status & Next Steps
Implemented Features
- ✅ Multi-tenant architecture with vendor isolation
- ✅ Team management with role-based permissions
- ✅ Letzshop marketplace integration
- ✅ Super admin bulk vendor management
- ✅ Environment-agnostic deployment strategy
Upcoming Development
- 🔄 Frontend implementation with dynamic theming
- 🔄 Customer-facing shop interfaces
- 🔄 Order processing system
- 🔄 Payment gateway integration
- 🔄 Advanced analytics dashboard
Future Enhancements
- 📋 Additional marketplace integrations
- 📋 Advanced product management features
- 📋 Customer loyalty programs
- 📋 Multi-language support
- 📋 Mobile application
Technical Advantages
Scalability
- Horizontal scaling through vendor isolation
- Microservice-ready architecture
- Environment-flexible deployment
- Database partitioning capabilities
Maintainability
- Single codebase for all vendors
- Centralized feature updates
- Consistent development patterns
- Automated testing strategies
Flexibility
- Vendor-specific customization
- Multiple deployment modes
- Extensible marketplace integration
- Theme system for brand customization
This architecture provides a robust foundation for a scalable, multi-tenant ecommerce platform that can efficiently serve multiple vendors while maintaining complete data isolation and providing flexible marketplace integration capabilities.