HEX
Server: LiteSpeed
System: Linux s1049.use1.mysecurecloudhost.com 4.18.0-477.27.2.lve.el8.x86_64 #1 SMP Wed Oct 11 12:32:56 UTC 2023 x86_64
User: xedaptot (3356)
PHP: 8.3.31
Disabled: NONE
Upload Files
File: /home/xedaptot/hi.naniguide.com/app/Services/TransactionalEmailService.php
<?php

namespace App\Services;

use App\Models\TransactionalEmail;
use App\Models\Customer;
use Illuminate\Pagination\LengthAwarePaginator;
use Illuminate\Support\Str;

class TransactionalEmailService
{
    /**
     * Get paginated list of transactional emails for a customer.
     */
    public function getPaginated(Customer $customer, array $filters = [], int $perPage = 15): LengthAwarePaginator
    {
        $query = TransactionalEmail::where('customer_id', $customer->id);

        // Apply filters
        if (isset($filters['search'])) {
            $search = $filters['search'];
            $query->where(function ($q) use ($search) {
                $q->where('name', 'like', "%{$search}%")
                    ->orWhere('key', 'like', "%{$search}%")
                    ->orWhere('subject', 'like', "%{$search}%");
            });
        }

        if (isset($filters['status'])) {
            $query->where('status', $filters['status']);
        }

        return $query->latest()->paginate($perPage);
    }

    /**
     * Create a new transactional email.
     */
    public function create(Customer $customer, array $data): TransactionalEmail
    {
        return TransactionalEmail::create([
            'customer_id' => $customer->id,
            'name' => $data['name'],
            'key' => $data['key'] ?? Str::slug($data['name']),
            'subject' => $data['subject'],
            'from_name' => $data['from_name'] ?? null,
            'from_email' => $data['from_email'] ?? $customer->email,
            'reply_to' => $data['reply_to'] ?? null,
            'html_content' => $data['html_content'] ?? null,
            'plain_text_content' => $data['plain_text_content'] ?? null,
            'template_variables' => $data['template_variables'] ?? [],
            'status' => $data['status'] ?? 'active',
            'description' => $data['description'] ?? null,
            'track_opens' => $data['track_opens'] ?? false,
            'track_clicks' => $data['track_clicks'] ?? false,
        ]);
    }

    /**
     * Update an existing transactional email.
     */
    public function update(TransactionalEmail $transactionalEmail, array $data): TransactionalEmail
    {
        $transactionalEmail->update($data);
        return $transactionalEmail->fresh();
    }

    /**
     * Delete a transactional email.
     */
    public function delete(TransactionalEmail $transactionalEmail): bool
    {
        return $transactionalEmail->delete();
    }

    /**
     * Send a transactional email.
     */
    public function send(TransactionalEmail $transactionalEmail, string $to, array $variables = []): bool
    {
        // In a real implementation, this would send the email
        // For now, just increment the sent count
        $transactionalEmail->increment('sent_count');
        
        return true;
    }
}