# Implementation Guide - Mivita Subdomain Optimization

## Overview

This guide provides step-by-step instructions for implementing the optimized multi-domain and subdomain architecture for the Mivita application.

## Prerequisites

- Backup of current system
- Test environment available
- Access to web server configuration
- Understanding of Laravel routing and middleware

## Phase 1: Foundation Setup

### Step 1: Create New Service Classes

1. **Create DomainService**

   ```bash
   # Copy from dev/subdomain-optimization/DomainService.php
   cp dev/subdomain-optimization/DomainService.php app/Services/DomainService.php
   ```

2. **Create DomainContext**

   ```bash
   # Create Domain directory and copy context
   mkdir -p app/Domain
   cp dev/subdomain-optimization/DomainContext.php app/Domain/DomainContext.php
   ```

3. **Create New Middleware**
   ```bash
   # Copy enhanced middleware
   cp dev/subdomain-optimization/DomainResolver.php app/Http/Middleware/DomainResolver.php
   ```

### Step 2: Register New Services

Add to `config/app.php`:

```php
'providers' => [
    // ... existing providers
    App\Providers\DomainServiceProvider::class,
],
```

Create `app/Providers/DomainServiceProvider.php`:

```php
<?php

namespace App\Providers;

use App\Services\DomainService;
use Illuminate\Support\ServiceProvider;

class DomainServiceProvider extends ServiceProvider
{
    public function register()
    {
        $this->app->singleton(DomainService::class);
    }

    public function boot()
    {
        //
    }
}
```

### Step 3: Update Kernel Configuration

Add new middleware to `app/Http/Kernel.php`:

```php
protected $middleware = [
    // ... existing middleware
    \App\Http\Middleware\DomainResolver::class,
];

protected $middlewareGroups = [
    'web' => [
        // Remove old Subdomain middleware
        // \App\Http\Middleware\Subdomain::class,
        // ... other middleware
    ],
];
```

## Phase 2: Route Structure Migration

### Step 1: Create New Route Structure

```bash
# Create new directory structure
mkdir -p routes/domains/subdomains
mkdir -p routes/shared/crm
mkdir -p routes/shared/api

# Create placeholder files
touch routes/domains/main.php
touch routes/domains/shop.php
touch routes/domains/subdomains/crm.php
touch routes/domains/subdomains/portal.php
touch routes/domains/subdomains/checkout.php
touch routes/domains/subdomains/user-shops.php
touch routes/shared/legal.php
touch routes/shared/common.php
```

### Step 2: Migrate Existing Routes

1. **Legal Routes** (move to `routes/shared/legal.php`)

   - Extract legal routes from all current route files
   - Remove duplicates
   - Standardize naming

2. **Main Domain Routes** (move to `routes/domains/main.php`)

   - Extract routes from `routes/main.php`
   - Clean up and organize

3. **CRM Routes** (move to `routes/domains/subdomains/crm.php`)

   - Extract routes from `routes/crm.php`
   - Split into sub-files for organization

4. **User Shop Routes** (move to `routes/domains/subdomains/user-shops.php`)
   - Extract routes from `routes/subdomain.php`
   - Remove domain-specific logic (handled by middleware)

### Step 3: Update Route Service Provider

Replace `app/Providers/RouteServiceProvider.php` with the optimized version:

```bash
cp dev/subdomain-optimization/RouteServiceProvider.php app/Providers/RouteServiceProvider.php
```

## Phase 3: Testing and Validation

### Step 1: Unit Tests

Create tests for new components:

```bash
php artisan make:test DomainServiceTest --unit
php artisan make:test DomainContextTest --unit
php artisan make:test DomainResolverTest
```

### Step 2: Feature Tests

Test each domain type:

```bash
php artisan make:test MainDomainTest
php artisan make:test CrmDomainTest
php artisan make:test UserShopDomainTest
php artisan make:test CheckoutDomainTest
php artisan make:test PortalDomainTest
```

### Step 3: Manual Testing

Test each domain type manually:

1. **Main Domain** (`mivita.care`)

   - Homepage loads correctly
   - Registration works
   - Contact forms work
   - Legal pages accessible

2. **CRM Domain** (`my.mivita.care`)

   - Login system works
   - User dashboard accessible
   - Admin functions work
   - Session management correct

3. **User Shops** (`{slug}.mivita.care`)

   - Valid shops load correctly
   - Invalid shops redirect properly
   - Shopping cart functionality works
   - Session isolation working

4. **Checkout Domain** (`checkout.mivita.care`)

   - Payment processing works
   - Transaction handling correct
   - Security measures in place

5. **Portal Domain** (`in.mivita.care`)
   - Customer login works
   - Portal functionality accessible
   - Data isolation correct

## Phase 4: Performance Optimization

### Step 1: Enable Caching

1. **Route Caching**

   ```bash
   php artisan route:cache
   ```

2. **User Shop Caching**
   - Configure Redis/Memcached
   - Test cache invalidation
   - Monitor cache hit rates

### Step 2: Database Optimization

1. **Add Indexes**

   ```sql
   CREATE INDEX idx_user_shops_slug_active ON user_shops (slug, active);
   CREATE INDEX idx_users_shop_active ON users (id) WHERE shop_active = 1;
   ```

2. **Query Optimization**
   - Review N+1 queries
   - Optimize user shop lookups
   - Add eager loading where needed

### Step 3: Monitoring Setup

1. **Application Monitoring**

   - Add performance metrics
   - Monitor response times per domain
   - Track error rates by domain type

2. **Cache Monitoring**
   - Monitor cache hit/miss rates
   - Track cache memory usage
   - Set up cache warming

## Phase 5: Deployment Strategy

### Step 1: Feature Flags

Implement feature flags for gradual rollout:

```php
// In DomainResolver middleware
if (config('features.new_domain_resolver', false)) {
    // Use new logic
} else {
    // Fall back to old middleware
}
```

### Step 2: Blue-Green Deployment

1. **Prepare Blue Environment**

   - Deploy new code to blue environment
   - Test all functionality
   - Verify performance metrics

2. **Switch Traffic**
   - Gradually route traffic to blue
   - Monitor for issues
   - Ready to rollback if needed

### Step 3: Monitoring During Deployment

1. **Real-time Monitoring**

   - Response times
   - Error rates
   - User shop accessibility
   - Payment processing success

2. **Rollback Triggers**
   - Error rate > 1%
   - Response time > 2x baseline
   - Payment failures > 0.1%
   - User complaints

## Rollback Plan

### Immediate Rollback (< 5 minutes)

1. **Revert Middleware**

   ```php
   // In Kernel.php, re-enable old middleware
   \App\Http\Middleware\Subdomain::class,
   ```

2. **Revert Route Service Provider**

   ```bash
   git checkout HEAD~1 app/Providers/RouteServiceProvider.php
   ```

3. **Clear Caches**
   ```bash
   php artisan route:clear
   php artisan config:clear
   php artisan cache:clear
   ```

### Full Rollback (< 30 minutes)

1. **Revert All Changes**

   ```bash
   git revert <commit-hash>
   ```

2. **Redeploy Previous Version**

   ```bash
   # Deploy previous known-good version
   ```

3. **Verify Functionality**
   - Test all domain types
   - Verify user shop access
   - Check payment processing

## Configuration Management

### Environment Variables

Add to `.env`:

```env
# Domain optimization feature flags
DOMAIN_RESOLVER_ENABLED=true
DOMAIN_CACHE_ENABLED=true
DOMAIN_CACHE_TTL=3600

# Monitoring
DOMAIN_MONITORING_ENABLED=true
DOMAIN_PERFORMANCE_TRACKING=true
```

### Configuration Files

Update `config/domains.php`:

```php
<?php

return [
    'cache_ttl' => env('DOMAIN_CACHE_TTL', 3600),
    'monitoring_enabled' => env('DOMAIN_MONITORING_ENABLED', false),
    'performance_tracking' => env('DOMAIN_PERFORMANCE_TRACKING', false),

    'fixed_subdomains' => ['my', 'in', 'checkout'],

    'middleware_stacks' => [
        'main' => ['web'],
        'crm' => ['web', 'auth'],
        'portal' => ['web', 'auth:customers'],
        'checkout' => ['web', 'checkout'],
        'user-shop' => ['web', 'subdomain'],
    ],
];
```

## Maintenance Procedures

### Regular Maintenance

1. **Weekly Cache Clearing**

   ```bash
   # Clear expired user shop cache entries
   php artisan domain:cache:clean
   ```

2. **Monthly Performance Review**

   - Review response time metrics
   - Check cache hit rates
   - Analyze error patterns

3. **Quarterly Domain Audit**
   - Review user shop validity
   - Clean up inactive shops
   - Update domain configurations

### Emergency Procedures

1. **User Shop Outage**

   - Identify affected shops
   - Clear specific cache entries
   - Notify affected users

2. **Domain Resolution Issues**

   - Check DNS configuration
   - Verify middleware configuration
   - Test domain parsing logic

3. **Performance Degradation**
   - Check cache status
   - Review database performance
   - Scale resources if needed

## Success Metrics

### Performance Metrics

- **Response Time**: < 200ms for cached requests
- **Cache Hit Rate**: > 95% for user shop lookups
- **Error Rate**: < 0.1% across all domains
- **Uptime**: > 99.9% per domain type

### Business Metrics

- **User Shop Accessibility**: 100% for active shops
- **Payment Success Rate**: > 99.5%
- **Customer Satisfaction**: No complaints about domain issues
- **Development Velocity**: Faster feature development per domain

### Technical Metrics

- **Code Maintainability**: Reduced cyclomatic complexity
- **Test Coverage**: > 90% for domain-related code
- **Documentation**: All new components documented
- **Security**: No domain-based security vulnerabilities
