libra/docs/stories/story-8.10-admin-notificati...

80 lines
2.0 KiB
Markdown

# Story 8.10: Admin Notification - System Events
## Epic Reference
**Epic 8:** Email Notification System
## User Story
As an **admin**,
I want **to be notified of critical system events**,
So that **I can address issues promptly**.
## Acceptance Criteria
### Events to Notify
- [ ] Email delivery failures
- [ ] Scheduled job failures
- [ ] Critical application errors
### Content
- [ ] Event type and description
- [ ] Timestamp
- [ ] Relevant details
- [ ] Recommended action (if any)
### Delivery
- [ ] Sent immediately (not queued)
- [ ] Clear subject line indicating urgency
## Technical Notes
```php
// In App\Exceptions\Handler or bootstrap/app.php
->withExceptions(function (Exceptions $exceptions) {
$exceptions->reportable(function (Throwable $e) {
if ($this->shouldNotifyAdmin($e)) {
$admin = User::where('user_type', 'admin')->first();
$admin?->notify(new SystemErrorNotification($e));
}
});
});
class SystemErrorNotification extends Notification
{
public function __construct(
public Throwable $exception
) {}
public function via(object $notifiable): array
{
return ['mail'];
}
public function toMail(object $notifiable): MailMessage
{
return (new MailMessage)
->subject('[URGENT] System Error - Libra Law Firm')
->line('A critical error occurred on the platform.')
->line('Error: ' . $this->exception->getMessage())
->line('Time: ' . now()->format('Y-m-d H:i:s'))
->line('Please check the logs for more details.');
}
}
// Queue failure notification
Queue::failing(function (JobFailed $event) {
$admin = User::where('user_type', 'admin')->first();
$admin?->notify(new QueueFailureNotification($event));
});
```
## Definition of Done
- [ ] Email failures notified
- [ ] Job failures notified
- [ ] Critical errors notified
- [ ] Sent immediately
- [ ] Clear urgency indication
- [ ] Tests pass
## Estimation
**Complexity:** Medium | **Effort:** 3 hours