add Emailer and EmailFactory interfaces with laravel + fake impls

This commit is contained in:
Yisroel Baum 2026-05-06 22:06:30 +03:00
parent e16cb45387
commit 2890781a56
Signed by: yisroelbaum
GPG key ID: 0FA60884F75520A9
6 changed files with 104 additions and 0 deletions

View file

@ -0,0 +1,8 @@
<?php
namespace App\Email;
interface EmailFactory
{
public function makeConfirmationEmail(string $token): string;
}

View file

@ -0,0 +1,8 @@
<?php
namespace App\Email;
interface Emailer
{
public function send(string $from, string $to, string $body): void;
}

View file

@ -0,0 +1,15 @@
<?php
namespace App\Email;
class LaravelEmailFactory implements EmailFactory
{
public function __construct(
private string $confirmationUrlPrefix,
) {}
public function makeConfirmationEmail(string $token): string
{
return "Confirm your email: {$this->confirmationUrlPrefix}{$token}";
}
}

View file

@ -0,0 +1,25 @@
<?php
namespace App\Email;
use Illuminate\Contracts\Mail\Mailer;
use Illuminate\Mail\Message;
class LaravelMailer implements Emailer
{
public function __construct(
private Mailer $mailer,
) {}
public function send(string $from, string $to, string $body): void
{
$this->mailer->raw(
$body,
function (Message $message) use ($from, $to) {
$message->from($from)
->to($to)
->subject('TIDE');
}
);
}
}