feat: Enhance Support Reply Service with tone instructions and article details
- Added tone instruction retrieval to SupportReplyService. - Improved user feedback when no relevant article is found. - Included article URL and tone instruction in LLM prompt. - Updated response format to include source information. - Enhanced article management UI with search functionality and editing capabilities. - Introduced a new API endpoint for nearest articles based on vector search. - Added confidence badge component to display article confidence levels. - Implemented tests for article searching, editing, and nearest article API. - Removed obsolete .htaccess file.
This commit is contained in:
@@ -9,10 +9,29 @@ use Illuminate\Support\Facades\DB;
|
||||
|
||||
class AdminArticleService
|
||||
{
|
||||
public function paginate(int $perPage = 10): LengthAwarePaginator
|
||||
public function paginate(int $perPage = 10, ?string $search = null): LengthAwarePaginator
|
||||
{
|
||||
$search = $search !== null ? trim($search) : '';
|
||||
|
||||
$numericSearch = ltrim($search, '#');
|
||||
|
||||
return Article::query()
|
||||
->with('quickReplies')
|
||||
->when($search !== '', function ($query) use ($numericSearch, $search): void {
|
||||
$like = "%{$search}%";
|
||||
|
||||
$query->where(function ($query) use ($numericSearch, $like): void {
|
||||
$query
|
||||
->where('title', 'ilike', $like)
|
||||
->orWhere('content', 'ilike', $like)
|
||||
->orWhere('source_url', 'ilike', $like)
|
||||
->orWhere('source_article_id', 'ilike', $like);
|
||||
|
||||
if (ctype_digit($numericSearch)) {
|
||||
$query->orWhere('id', (int) $numericSearch);
|
||||
}
|
||||
});
|
||||
})
|
||||
->latest()
|
||||
->paginate($perPage);
|
||||
}
|
||||
@@ -34,6 +53,25 @@ class AdminArticleService
|
||||
return (bool) Article::query()->whereKey($articleId)->delete();
|
||||
}
|
||||
|
||||
public function findById(int $articleId): ?Article
|
||||
{
|
||||
return Article::query()->find($articleId);
|
||||
}
|
||||
|
||||
public function updateContent(int $articleId, string $title, string $content): bool
|
||||
{
|
||||
$article = Article::query()->find($articleId);
|
||||
if ($article === null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$article->title = trim($title);
|
||||
$article->content = trim($content);
|
||||
$article->save();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public function updateMetadata(int $articleId, ?string $note, array $allowedActions, array $quickReplyIds = []): bool
|
||||
{
|
||||
$article = Article::query()->find($articleId);
|
||||
|
||||
Reference in New Issue
Block a user