WIP: feature_paste #1

Draft
Miroslavsckaya wants to merge 24 commits from feature_paste into master
3 changed files with 21 additions and 19 deletions
Showing only changes of commit c164ed446b - Show all commits

View file

@ -24,23 +24,9 @@ class PasteController extends AbstractController
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$pasteData = $form->getData();
skobkin marked this conversation as resolved Outdated

You can just set it in the constructor.

You can just set it in the constructor.
$pasteData->ip = $request->getClientIp();
skobkin marked this conversation as resolved Outdated

Do you need IP in PasteData?

Do you need IP in `PasteData`?
$secret = null;
if ($pasteData->private) {
$secret = hash('sha1', random_bytes(25));
}
$paste = new Paste(
$pasteData->text,
$pasteData->language,
$pasteData->description,
$pasteData->filename,
$pasteData->author,
new \DateTimeImmutable(),
$pasteData->expirationDate,
$request->getClientIp(),
$secret
);
$paste = Paste::fromFormData($pasteData);
skobkin marked this conversation as resolved Outdated

Do we need double quotes here?

By the way, we can also do that in the constructor.

Do we need double quotes here? By the way, we can also do that in the constructor.
skobkin marked this conversation as resolved Outdated

This still could be done in the entity itself.

This still could be done in the entity itself.
$pasteRepository->save($paste);
return $this->redirectToRoute($request->attributes->get('_route'));

View file

@ -20,6 +20,7 @@ class PasteFormData
public string $author = 'anonymous';
skobkin marked this conversation as resolved
Review

Why string and Assert\NotBlank?

Why `string` and `Assert\NotBlank`?
#[Assert\Type(\DateTimeImmutable::class)]
public ?\DateTimeImmutable $expirationDate;
skobkin marked this conversation as resolved
Review

Is this validation being processed BEFORE storing the data in the DTO?
If not, it's pointless as with bool field earlier.

Is this validation being processed BEFORE storing the data in the DTO? If not, it's pointless as with `bool` field earlier.
public string $ip;
skobkin marked this conversation as resolved
Review

Or you can make constructor private, use property promotion and add fromPaste() method to create it from the entity.

Or you can make constructor `private`, use property promotion and add `fromPaste()` method to create it from the entity.
public function __construct(?Paste $paste=null)
{

View file

@ -2,7 +2,7 @@
declare(strict_types = 1);
skobkin marked this conversation as resolved Outdated

Please do not forget declare(strict_types=1);

Please do not forget `declare(strict_types=1);`
namespace App\Entity;
use App\DTO\PasteFormData;
use App\Repository\PasteRepository;
use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Mapping as ORM;
@ -15,7 +15,7 @@ class Paste
#[ORM\Column]
Review

Why not also constructor promotion though?

Why not also constructor promotion though?
public readonly int $id;
skobkin marked this conversation as resolved Outdated

No need for double quotes here too.

No need for double quotes here too.
public function __construct(
private function __construct(
#[ORM\Column(type: 'text', nullable: false)]
public readonly string $text,
#[ORM\Column(length: 25, nullable: true)]
@ -35,4 +35,19 @@ class Paste
#[ORM\Column(length: 40, nullable: true)]
public readonly ?string $secret,
skobkin marked this conversation as resolved Outdated

Why double quotes?

Why double quotes?
) {}
Review

You can use self as return type hint too.

You can use `self` as return type hint too.
public static function fromFormData(PasteFormData $pasteFormData): Paste
{
skobkin marked this conversation as resolved Outdated

Why mutable date? Do you plan to change publish date?

Why mutable date? Do you plan to change publish date?
return new self(
$pasteFormData->text,
$pasteFormData->language,
$pasteFormData->description,
$pasteFormData->filename,
$pasteFormData->author,
new \DateTimeImmutable(),
$pasteFormData->expirationDate,
$pasteFormData->ip,
$pasteFormData->private ? \hash('sha1', \random_bytes(25)) : null,
);
}
skobkin marked this conversation as resolved Outdated

Same code style problem like above. You're leaving { on the same line with return type.

It's ok if you're doing multi-line arguments, but not in this case.

Same code style problem like above. You're leaving `{` on the same line with return type. It's ok if you're doing multi-line arguments, but not in this case.
}