78 lines
1.8 KiB
Markdown
78 lines
1.8 KiB
Markdown
# Story 8.4: Booking Approved Email
|
|
|
|
## Epic Reference
|
|
**Epic 8:** Email Notification System
|
|
|
|
## User Story
|
|
As a **client**,
|
|
I want **to receive notification when my booking is approved**,
|
|
So that **I can confirm the appointment and add it to my calendar**.
|
|
|
|
## Acceptance Criteria
|
|
|
|
### Trigger
|
|
- [ ] Sent on booking approval by admin
|
|
|
|
### Content
|
|
- [ ] "Your consultation has been approved"
|
|
- [ ] Confirmed date and time
|
|
- [ ] Duration (45 minutes)
|
|
- [ ] Consultation type (free/paid)
|
|
- [ ] If paid: amount and payment instructions
|
|
- [ ] .ics calendar file attached
|
|
- [ ] "Add to Calendar" button
|
|
- [ ] Location/contact information
|
|
|
|
### Language
|
|
- [ ] Email in client's preferred language
|
|
|
|
### Attachment
|
|
- [ ] Valid .ics calendar file
|
|
|
|
## Technical Notes
|
|
|
|
```php
|
|
class BookingApprovedEmail extends Mailable
|
|
{
|
|
use Queueable, SerializesModels;
|
|
|
|
public function __construct(
|
|
public Consultation $consultation,
|
|
public string $icsContent,
|
|
public ?string $paymentInstructions = null
|
|
) {}
|
|
|
|
public function content(): Content
|
|
{
|
|
$locale = $this->consultation->user->preferred_language ?? 'ar';
|
|
|
|
return new Content(
|
|
markdown: "emails.booking.approved.{$locale}",
|
|
with: [
|
|
'consultation' => $this->consultation,
|
|
'paymentInstructions' => $this->paymentInstructions,
|
|
],
|
|
);
|
|
}
|
|
|
|
public function attachments(): array
|
|
{
|
|
return [
|
|
Attachment::fromData(fn() => $this->icsContent, 'consultation.ics')
|
|
->withMime('text/calendar'),
|
|
];
|
|
}
|
|
}
|
|
```
|
|
|
|
## Definition of Done
|
|
- [ ] Email sent on approval
|
|
- [ ] All details included
|
|
- [ ] Payment info for paid consultations
|
|
- [ ] .ics file attached
|
|
- [ ] Bilingual templates
|
|
- [ ] Tests pass
|
|
|
|
## Estimation
|
|
**Complexity:** Medium | **Effort:** 3 hours
|