Files
TicketAssistent/app/Livewire/Admin/TicketMonitor.php
SitiWeb f939133fe0 Add admin views for quick replies, settings, and ticket details
- Created `quick-replies.blade.php` for managing quick replies.
- Added `settings.blade.php` for admin settings management.
- Implemented `ticket-show.blade.php` to display ticket details.
- Introduced `timeline-card.blade.php` component for displaying timeline information.

Enhance quick reply management functionality

- Developed `quick-reply-manager.blade.php` for creating and editing quick replies.
- Integrated Livewire for dynamic interaction and validation.

Implement settings page for AI configuration

- Created `settings-page.blade.php` for managing AI settings, including prompts and provider instances.
- Added functionality for managing models and embeddings.

Add ticket show functionality with real-time updates

- Implemented ticket details view with processing status and tool call logs.
- Added support for displaying article suggestions and error messages.

Create unit tests for AI classifier and domain info tool

- Added `AIClassifierServiceTest.php` to validate AI classifier functionality.
- Implemented `DomainInfoToolTest.php` for domain parameter validation.
- Created `OxxaClientTest.php` to test API interactions and password hashing.
2026-04-30 01:50:21 +02:00

79 lines
2.1 KiB
PHP

<?php
namespace App\Livewire\Admin;
use App\Exceptions\OllamaUnavailableException;
use App\Services\AdminTicketService;
use App\Services\TicketIngestionService;
use Livewire\Component;
use Livewire\WithPagination;
class TicketMonitor extends Component
{
use WithPagination;
public int $perPage = 10;
public string $newTicketMessage = '';
public string $apiUser = '';
public string $apiPassword = '';
public ?array $lastResult = null;
public ?string $submitError = null;
public function updatedPerPage(): void
{
$this->resetPage();
}
public function submitTicket(TicketIngestionService $ticketIngestionService): void
{
$this->submitError = null;
$this->lastResult = null;
$this->validate([
'newTicketMessage' => ['required', 'string', 'min:5', 'max:5000'],
'apiUser' => ['nullable', 'string', 'max:255', 'required_with:apiPassword'],
'apiPassword' => ['nullable', 'string', 'max:255', 'required_with:apiUser'],
]);
try {
$ingested = $ticketIngestionService->ingest(trim($this->newTicketMessage), $this->credentialsPayload());
} catch (OllamaUnavailableException $e) {
$this->submitError = 'LLM provider niet beschikbaar. Reden: '.$e->getMessage();
return;
}
$this->reset(['newTicketMessage', 'apiUser', 'apiPassword']);
$this->resetPage();
$this->lastResult = [
'ticket_id' => $ingested['ticket']->id,
'status' => $ingested['ticket']->status,
];
}
private function credentialsPayload(): ?array
{
if (trim($this->apiUser) === '' && trim($this->apiPassword) === '') {
return null;
}
return [
'apiuser' => $this->apiUser,
'apipassword' => $this->apiPassword,
];
}
public function render(AdminTicketService $service)
{
return view('livewire.admin.ticket-monitor', [
'tickets' => $service->paginateWithDecision($this->perPage),
]);
}
}