Skip to content
/ example Public

πŸ“¦ Complete Laravel example application demonstrating AI-enhanced MySQL full-text search integration with the Altus 4 API.

License

Notifications You must be signed in to change notification settings

altus4/example

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

3 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Altus 4 Laravel Example Client

A complete Laravel application demonstrating how to integrate with the Altus 4 API for AI-enhanced MySQL full-text search. This example showcases practical implementation patterns, best practices, and real-world usage scenarios.

Overview

This Laravel application demonstrates:

  • Product Search: Full-text search across product catalogs using Altus 4's enhanced MySQL search
  • API Integration: Clean service layer integration with the Altus 4 API
  • Modern Frontend: Vue.js + Inertia.js + TypeScript for a responsive search interface
  • Search Analytics: Integration with Altus 4's search analytics and trends
  • Performance Optimization: Efficient data fetching and result processing

Key Features

  • AI-Enhanced Search - Semantic search with relevance scoring
  • Auto-complete - Real-time search suggestions
  • Search Analytics - Track search performance and trends
  • Result Highlighting - Smart snippets and relevance indicators
  • Performance Optimized - Efficient result processing and caching
  • Modern UI - Clean, responsive interface with Tailwind CSS

Architecture

Backend Components

app/
β”œβ”€β”€ Http/Controllers/
β”‚   └── ProductController.php     # Main search controller
β”œβ”€β”€ Models/
β”‚   β”œβ”€β”€ Product.php              # Product model with search metadata
β”‚   └── User.php                 # User authentication
└── Services/
    └── AltusService.php         # Altus API client service

Frontend Components

resources/js/
β”œβ”€β”€ pages/
β”‚   └── Welcome.vue              # Main search interface
└── types/
    └── index.d.ts               # TypeScript definitions

Database Schema

The application includes a products table optimized for full-text search:

-- Products table with FULLTEXT index
CREATE TABLE products (
    id BIGINT UNSIGNED PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    sku VARCHAR(255) UNIQUE,
    description TEXT,
    price DECIMAL(8,2) NOT NULL,
    stock INTEGER DEFAULT 0,
    weight DECIMAL(8,2),
    created_at TIMESTAMP,
    updated_at TIMESTAMP,

    FULLTEXT(name, description, sku)
    -- Optimized for Altus 4 search
);

Prerequisites

  • PHP: 8.2 or higher
  • Composer: Latest stable version
  • Node.js: 18.0 or higher
  • MySQL: 8.0+ (with FULLTEXT search support)
  • Altus 4 API: Running instance with API key

Installation

1. Clone and Install Dependencies

# Clone the repository
git clone <your-repo-url>
cd altus4-laravel-example

# Install PHP dependencies
composer install

# Install Node.js dependencies
npm install

2. Environment Configuration

# Copy environment file
cp .env.example .env

# Generate application key
php artisan key:generate

3. Configure Environment Variables

Edit .env with your settings:

# Application
APP_NAME="Altus 4 Laravel Example"
APP_ENV=local
APP_DEBUG=true
APP_URL=http://localhost:8000

# Database
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=altus4_example
DB_USERNAME=your_db_user
DB_PASSWORD=your_db_password

# Altus 4 API Configuration
ALTUS_BASE_URL=http://localhost:3000/api/v1
ALTUS_API_KEY=your_altus_api_key
ALTUS_DATABASE_ID=your_database_id

4. Database Setup

# Create database
mysql -u root -p -e "CREATE DATABASE altus4_example"

# Run migrations
php artisan migrate

# Seed with sample data
php artisan db:seed

5. Altus 4 API Setup

Make sure your Altus 4 API is running and configured:

# In your Altus 4 API directory
npm run dev

Add your Laravel app's database to Altus 4:

# Register your database with Altus 4 API
curl -X POST http://localhost:3000/api/v1/databases \
  -H "Authorization: Bearer YOUR_ALTUS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Laravel Example Products",
    "host": "127.0.0.1",
    "port": 3306,
    "database": "altus4_example",
    "username": "your_db_user",
    "password": "your_db_password"
  }'

6. Build and Start

# Build frontend assets
npm run build

# Start Laravel development server
php artisan serve

# Or use the dev script for concurrent processes
composer run dev

The application will be available at http://localhost:8000

Configuration

Altus 4 Service Configuration

The AltusService class handles all API interactions. Configure it in config/services.php:

// config/services.php
return [
    'altus' => [
        'base_url' => env('ALTUS_BASE_URL', 'http://localhost:3000/api/v1'),
        'api_key' => env('ALTUS_API_KEY'),
        'timeout' => env('ALTUS_TIMEOUT', 30),
        'retry_attempts' => env('ALTUS_RETRY_ATTEMPTS', 3),
    ],
];

Search Configuration

Customize search behavior by modifying the ProductController:

// In ProductController::index()
$response = $altus->search([
    'query' => $query,
    'databases' => [env('ALTUS_DATABASE_ID')], // Your database ID
    'tables' => ['products'],                  // Tables to search
    'columns' => ['name', 'description', 'sku'], // Searchable columns
    'searchMode' => 'natural',                 // natural, boolean, semantic
    'limit' => 50,                            // Results per page
    'includeAnalytics' => true,               // Include search analytics
]);

Usage Examples

Basic Product Search

// In a controller
use App\Services\AltusService;

public function search(Request $request, AltusService $altus)
{
    $results = $altus->search([
        'query' => $request->input('q'),
        'databases' => ['your-database-id'],
        'searchMode' => 'natural',
        'limit' => 20
    ]);

    return response()->json($results);
}

Search Suggestions

// Get auto-complete suggestions
$suggestions = $altus->suggestions(
    query: 'laptop',
    databases: ['your-database-id'],
    limit: 5
);

Search Analytics

// Get search trends
$trends = $altus->trends();

// Get search history
$history = $altus->history(limit: 50, offset: 0);

// Analyze query performance
$analysis = $altus->analyze([
    'query' => 'gaming laptop',
    'databases' => ['your-database-id']
]);

Code Structure

ProductController

The main controller demonstrates:

  • Search query handling
  • Result processing and ordering
  • Metadata attachment from Altus search results
  • Error handling for API failures

Key methods:

  • index() - Main search endpoint
  • extractSkus() - Extract product identifiers from search results
  • fetchProductsBySkus() - Efficiently fetch products maintaining search order
  • attachAltusMeta() - Attach Altus metadata (relevance scores, snippets)

AltusService

A clean service layer providing:

  • HTTP client configuration
  • Error handling and logging
  • Response processing
  • Multiple search methods (search, suggestions, analysis, trends)

Frontend Integration

The Vue.js frontend (Welcome.vue) showcases:

  • Real-time search form
  • Responsive product grid
  • Search result highlighting
  • Loading states and error handling

API Integration Patterns

1. Search Flow

sequenceDiagram
    participant User
    participant Laravel
    participant Altus
    participant MySQL

    User->>Laravel: Search query
    Laravel->>Altus: POST /api/v1/search
    Altus->>MySQL: Optimized FULLTEXT query
    MySQL->>Altus: Search results with metadata
    Altus->>Laravel: Enhanced results + analytics
    Laravel->>MySQL: Fetch full product data
    Laravel->>User: Formatted results
Loading

2. Error Handling

The service implements comprehensive error handling:

protected function request(string $method, string $path, array $body = []): ?array
{
    try {
        $response = Http::withHeaders([
            'Authorization' => "Bearer {$apiKey}",
            'Accept' => 'application/json',
        ])->timeout(30)->post($base . $path, $body);

        if ($response->successful()) {
            return $response->json();
        }

        // Log and handle non-success responses
        logger()->warning('AltusService: non-success response', [
            'status' => $response->status(),
            'body' => $response->body()
        ]);

        return null;
    } catch (Exception $e) {
        logger()->error('AltusService request failed: ' . $e->getMessage());
        return null;
    }
}

3. Result Processing

Efficient processing maintains search result ordering:

private function fetchProductsBySkus(array $skus)
{
    // Fetch products and key by SKU
    $fetched = Product::whereIn('sku', $skus)->get()->keyBy('sku');

    // Return in original search order
    return collect($skus)
        ->map(fn ($sku) => $fetched->get($sku))
        ->filter();
}

Performance Optimization

Database Optimization

-- Ensure proper FULLTEXT indexing
ALTER TABLE products ADD FULLTEXT(name, description, sku);

-- Index frequently searched columns
CREATE INDEX idx_products_price ON products(price);
CREATE INDEX idx_products_stock ON products(stock);

Laravel Optimization

// Use database connection pooling
// In config/database.php
'mysql' => [
    'options' => [
        PDO::ATTR_PERSISTENT => true,
    ],
],

// Cache frequent searches
$results = Cache::remember("search:{$query}", 300, function() use ($altus, $query) {
    return $altus->search(['query' => $query]);
});

Testing

Running Tests

# Run all tests
php artisan test

# Run specific test classes
php artisan test --filter=ProductControllerTest
php artisan test --filter=AltusServiceTest

Test Examples

// tests/Feature/SearchTest.php
public function test_product_search_returns_results()
{
    // Create test products
    $products = Product::factory()->count(10)->create();

    // Mock Altus API response
    Http::fake([
        'localhost:3000/api/v1/search' => Http::response([
            'success' => true,
            'data' => ['results' => [/* mock results */]]
        ])
    ]);

    // Test search endpoint
    $response = $this->get('/?q=laptop');

    $response->assertStatus(200);
    $response->assertInertia(fn ($page) =>
        $page->component('Welcome')
             ->has('products')
    );
}

Troubleshooting

Common Issues

  1. "Missing Altus configuration"

    • Ensure ALTUS_BASE_URL and ALTUS_API_KEY are set in .env
    • Verify the Altus 4 API is running
  2. "No search results"

    • Check that your database is registered with Altus 4
    • Verify FULLTEXT indexes exist on searchable columns
    • Ensure the database ID matches your Altus configuration
  3. "Frontend not loading"

    • Run npm run build to compile assets
    • Check that Node.js dependencies are installed
  4. "Database connection failed"

    • Verify MySQL is running and accessible
    • Check database credentials in .env
    • Ensure the database exists

Debug Mode

Enable verbose logging for troubleshooting:

# In .env
LOG_LEVEL=debug
ALTUS_DEBUG=true

Health Checks

Verify your setup:

# Check Altus API connectivity
curl -H "Authorization: Bearer YOUR_API_KEY" \
     http://localhost:3000/health

# Test database connection
php artisan tinker
>>> DB::connection()->getPdo();

# Verify products exist
>>> App\Models\Product::count();

Deployment

Production Checklist

  • Set APP_ENV=production in .env
  • Configure proper database credentials
  • Set up SSL certificates
  • Enable caching with Redis
  • Configure queue workers for background tasks
  • Set up monitoring and logging
  • Optimize Composer autoloader: composer install --optimize-autoloader --no-dev
  • Build production assets: npm run build

Docker Deployment

FROM php:8.2-fpm

# Install dependencies
RUN apt-get update && apt-get install -y \
    git curl zip unzip \
    && docker-php-ext-install pdo pdo_mysql

# Copy application
COPY . /var/www/html
WORKDIR /var/www/html

# Install dependencies
RUN composer install --optimize-autoloader --no-dev
RUN npm ci && npm run build

CMD ["php-fpm"]

Contributing

  1. Fork the repository
  2. Create a feature branch: git checkout -b feature/your-feature
  3. Make your changes with proper tests
  4. Run the test suite: php artisan test
  5. Commit your changes: git commit -am 'Add feature'
  6. Push to the branch: git push origin feature/your-feature
  7. Create a Pull Request

License

This example application is open-sourced software licensed under the MIT license.

Support


Built with Laravel, Vue.js, and the Altus 4 API

About

πŸ“¦ Complete Laravel example application demonstrating AI-enhanced MySQL full-text search integration with the Altus 4 API.

Topics

Resources

License

Stars

Watchers

Forks