Skip to content

Commit 9fc8b92

Browse files
Merge pull request #139 from acara-app/refactor/rename-ai-response-action
Refactor: Rename AI Response Action
2 parents a321f3c + c289e44 commit 9fc8b92

File tree

5 files changed

+29
-28
lines changed

5 files changed

+29
-28
lines changed

app/Actions/GenerateAiResponseAction.php renamed to app/Actions/ProcessAdvisorMessageAction.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@
55
namespace App\Actions;
66

77
use App\Contracts\Ai\Advisor;
8-
use App\Contracts\GeneratesAiResponse;
8+
use App\Contracts\ProcessesAdvisorMessage;
99
use App\Models\User;
1010
use Laravel\Ai\Contracts\ConversationStore;
1111

12-
final readonly class GenerateAiResponseAction implements GeneratesAiResponse
12+
final readonly class ProcessAdvisorMessageAction implements ProcessesAdvisorMessage
1313
{
1414
public function __construct(
1515
private Advisor $advisor,
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,12 @@
44

55
namespace App\Contracts;
66

7-
use App\Actions\GenerateAiResponseAction;
7+
use App\Actions\ProcessAdvisorMessageAction;
88
use App\Models\User;
99
use Illuminate\Container\Attributes\Bind;
1010

11-
#[Bind(GenerateAiResponseAction::class)]
12-
interface GeneratesAiResponse
11+
#[Bind(ProcessAdvisorMessageAction::class)]
12+
interface ProcessesAdvisorMessage
1313
{
1414
/**
1515
* @return array{response: string, conversation_id: string}

app/Services/Telegram/TelegramWebhookHandler.php

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
namespace App\Services\Telegram;
66

77
use App\Actions\SaveHealthLogAction;
8-
use App\Contracts\GeneratesAiResponse;
8+
use App\Contracts\ProcessesAdvisorMessage;
99
use App\Contracts\ParsesHealthData;
1010
use App\DataObjects\HealthLogData;
1111
use App\Enums\HealthEntryType;
@@ -22,11 +22,12 @@
2222
final class TelegramWebhookHandler extends WebhookHandler
2323
{
2424
public function __construct(
25-
private readonly GeneratesAiResponse $generateAiResponse,
25+
private readonly ProcessesAdvisorMessage $processAdvisorMessage,
2626
private readonly TelegramMessageService $telegramMessage,
2727
private readonly ParsesHealthData $healthDataParser,
2828
private readonly SaveHealthLogAction $saveHealthLog,
29-
) {}
29+
) {
30+
}
3031

3132
public function start(): void
3233
{
@@ -124,7 +125,7 @@ public function new(): void
124125
return;
125126
}
126127

127-
$conversationId = $this->generateAiResponse->resetConversation($linkedChat->user);
128+
$conversationId = $this->processAdvisorMessage->resetConversation($linkedChat->user);
128129
$linkedChat->update(['conversation_id' => $conversationId]);
129130

130131
$this->chat->message('✨ New conversation started! How can I help you?')->send();
@@ -410,7 +411,7 @@ private function toStringOrNull(mixed $value): ?string
410411

411412
private function generateAndSendResponse(UserTelegramChat $linkedChat, string $message): void
412413
{
413-
$result = $this->generateAiResponse->handle(
414+
$result = $this->processAdvisorMessage->handle(
414415
$linkedChat->user,
415416
$message,
416417
$linkedChat->conversation_id,

tests/Feature/Telegram/TelegramWebhookHandlerTest.php

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
declare(strict_types=1);
44

5-
use App\Contracts\GeneratesAiResponse;
5+
use App\Contracts\ProcessesAdvisorMessage;
66
use App\Contracts\ParsesHealthData;
77
use App\Enums\HealthEntryType;
88
use App\Enums\Sex;
@@ -249,12 +249,12 @@ function sendWebhook(mixed $test, string $text): Illuminate\Testing\TestResponse
249249
'conversation_id' => 'old-conv-id',
250250
]);
251251

252-
$mock = Mockery::mock(GeneratesAiResponse::class);
252+
$mock = Mockery::mock(ProcessesAdvisorMessage::class);
253253
$mock->shouldReceive('resetConversation')
254254
->once()
255255
->with(Mockery::on(fn (User $u): bool => $u->id === $user->id))
256256
->andReturn('new-conv-id');
257-
app()->instance(GeneratesAiResponse::class, $mock);
257+
app()->instance(ProcessesAdvisorMessage::class, $mock);
258258

259259
sendWebhook($this, '/new');
260260

@@ -271,9 +271,9 @@ function sendWebhook(mixed $test, string $text): Illuminate\Testing\TestResponse
271271
'telegraph_chat_id' => $this->telegraphChat->id,
272272
]);
273273

274-
$mock = Mockery::mock(GeneratesAiResponse::class);
274+
$mock = Mockery::mock(ProcessesAdvisorMessage::class);
275275
$mock->shouldReceive('resetConversation')->once()->andReturn('reset-conv-id');
276-
app()->instance(GeneratesAiResponse::class, $mock);
276+
app()->instance(ProcessesAdvisorMessage::class, $mock);
277277

278278
sendWebhook($this, '/reset');
279279

@@ -296,7 +296,7 @@ function sendWebhook(mixed $test, string $text): Illuminate\Testing\TestResponse
296296
'conversation_id' => 'existing-conv',
297297
]);
298298

299-
$mock = Mockery::mock(GeneratesAiResponse::class);
299+
$mock = Mockery::mock(ProcessesAdvisorMessage::class);
300300
$mock->shouldReceive('handle')
301301
->once()
302302
->with(
@@ -308,7 +308,7 @@ function sendWebhook(mixed $test, string $text): Illuminate\Testing\TestResponse
308308
'response' => 'Here are some breakfast suggestions...',
309309
'conversation_id' => 'existing-conv',
310310
]);
311-
app()->instance(GeneratesAiResponse::class, $mock);
311+
app()->instance(ProcessesAdvisorMessage::class, $mock);
312312

313313
sendWebhook($this, 'What should I eat for breakfast?');
314314

@@ -323,7 +323,7 @@ function sendWebhook(mixed $test, string $text): Illuminate\Testing\TestResponse
323323
'conversation_id' => null,
324324
]);
325325

326-
$mock = Mockery::mock(GeneratesAiResponse::class);
326+
$mock = Mockery::mock(ProcessesAdvisorMessage::class);
327327
$mock->shouldReceive('handle')
328328
->once()
329329
->with(
@@ -335,7 +335,7 @@ function sendWebhook(mixed $test, string $text): Illuminate\Testing\TestResponse
335335
'response' => 'Welcome!',
336336
'conversation_id' => 'first-conv-id',
337337
]);
338-
app()->instance(GeneratesAiResponse::class, $mock);
338+
app()->instance(ProcessesAdvisorMessage::class, $mock);
339339

340340
sendWebhook($this, 'Hello!');
341341

@@ -350,14 +350,14 @@ function sendWebhook(mixed $test, string $text): Illuminate\Testing\TestResponse
350350
'conversation_id' => 'existing-conv',
351351
]);
352352

353-
$mock = Mockery::mock(GeneratesAiResponse::class);
353+
$mock = Mockery::mock(ProcessesAdvisorMessage::class);
354354
$mock->shouldReceive('handle')
355355
->once()
356356
->andReturn([
357357
'response' => 'Response',
358358
'conversation_id' => 'some-new-conv',
359359
]);
360-
app()->instance(GeneratesAiResponse::class, $mock);
360+
app()->instance(ProcessesAdvisorMessage::class, $mock);
361361

362362
sendWebhook($this, 'Follow-up message');
363363

@@ -371,10 +371,10 @@ function sendWebhook(mixed $test, string $text): Illuminate\Testing\TestResponse
371371
'telegraph_chat_id' => $this->telegraphChat->id,
372372
]);
373373

374-
$mock = Mockery::mock(GeneratesAiResponse::class);
374+
$mock = Mockery::mock(ProcessesAdvisorMessage::class);
375375
$mock->shouldReceive('handle')
376376
->andThrow(new Exception('AI service unavailable'));
377-
app()->instance(GeneratesAiResponse::class, $mock);
377+
app()->instance(ProcessesAdvisorMessage::class, $mock);
378378

379379
sendWebhook($this, 'Hello');
380380

tests/Unit/Actions/GenerateAiResponseActionTest.php renamed to tests/Unit/Actions/ProcessAdvisorMessageActionTest.php

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
declare(strict_types=1);
44

5-
use App\Actions\GenerateAiResponseAction;
5+
use App\Actions\ProcessAdvisorMessageAction;
66
use App\Ai\Agents\NutritionAdvisor;
77
use App\Models\User;
88
use Laravel\Ai\Contracts\ConversationStore;
@@ -23,7 +23,7 @@
2323
->once()
2424
->andReturn('conv-123');
2525

26-
$action = new GenerateAiResponseAction(
26+
$action = new ProcessAdvisorMessageAction(
2727
resolve(NutritionAdvisor::class),
2828
$conversationStore,
2929
);
@@ -39,7 +39,7 @@
3939
it('uses existing conversation when provided', function (): void {
4040
NutritionAdvisor::fake(['Continuing...']);
4141

42-
$action = new GenerateAiResponseAction(
42+
$action = new ProcessAdvisorMessageAction(
4343
resolve(NutritionAdvisor::class),
4444
resolve(ConversationStore::class),
4545
);
@@ -61,7 +61,7 @@
6161
->once()
6262
->andReturn('latest-conv');
6363

64-
$action = new GenerateAiResponseAction(
64+
$action = new ProcessAdvisorMessageAction(
6565
resolve(NutritionAdvisor::class),
6666
$conversationStore,
6767
);
@@ -81,7 +81,7 @@
8181
->once()
8282
->andReturn('new-conv');
8383

84-
$action = new GenerateAiResponseAction(
84+
$action = new ProcessAdvisorMessageAction(
8585
resolve(NutritionAdvisor::class),
8686
$conversationStore,
8787
);

0 commit comments

Comments
 (0)