WIP: feature_paste #1
|
@ -13,7 +13,7 @@ final class Version20230720115905 extends AbstractMigration
|
||||||
public function up(Schema $schema): void
|
public function up(Schema $schema): void
|
||||||
skobkin marked this conversation as resolved
|
|||||||
{
|
{
|
||||||
$this->addSql('CREATE SEQUENCE paste_id_seq INCREMENT BY 1 MINVALUE 1 START 1');
|
$this->addSql('CREATE SEQUENCE paste_id_seq INCREMENT BY 1 MINVALUE 1 START 1');
|
||||||
$this->addSql('CREATE TABLE paste (id INT NOT NULL, text TEXT NOT NULL, language VARCHAR(25), description TEXT, filename VARCHAR(128), author VARCHAR(128) NOT NULL, publish_date TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL, expiration_date TIMESTAMP(0) WITHOUT TIME ZONE, ip VARCHAR(15) NOT NULL, secret VARCHAR(40), PRIMARY KEY(id))');
|
$this->addSql('CREATE TABLE paste (id INT NOT NULL, text TEXT NOT NULL, language VARCHAR(25), description TEXT, filename VARCHAR(128), author VARCHAR(128), publish_date TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL, expiration_date TIMESTAMP(0) WITHOUT TIME ZONE, ip VARCHAR(15) NOT NULL, secret VARCHAR(40), PRIMARY KEY(id))');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function down(Schema $schema): void
|
public function down(Schema $schema): void
|
||||||
|
|
|
@ -37,7 +37,7 @@ class PasteController extends AbstractController
|
||||||
}
|
}
|
||||||
|
|
||||||
#[Route('/{id}/{secret}')]
|
#[Route('/{id}/{secret}')]
|
||||||
skobkin marked this conversation as resolved
Outdated
skobkin
commented
I mean you don't need to pass creation date here at all. I mean you don't need to pass creation date here at all.
|
|||||||
public function showPaste(PasteRepository $pasteRepository, string $id, ?string $secret=NULL): Response
|
public function showPaste(PasteRepository $pasteRepository, string $id, ?string $secret = NULL): Response
|
||||||
skobkin
commented
`show_paste` at least.
|
|||||||
{
|
{
|
||||||
$paste = $pasteRepository->findOneBy(['id' => $id, 'secret' => $secret]);
|
$paste = $pasteRepository->findOneBy(['id' => $id, 'secret' => $secret]);
|
||||||
skobkin marked this conversation as resolved
Outdated
skobkin
commented
- it's a good idea to add `,` to the last argument too if you use multi-line formatting
- if you're doing this in the controller, you can just do something like `$pasteData->private ? \hash('sha1', \random_bytes(25)) : null`. But I suggest to do that in the static method (named constructor) as I also suggested nearby.
|
|||||||
$pasteData = new PasteFormData($paste);
|
$pasteData = new PasteFormData($paste);
|
||||||
|
|
|
@ -15,11 +15,10 @@ class PasteFormData
|
||||||
public ?string $language = null;
|
public ?string $language = null;
|
||||||
public ?string $description = null;
|
public ?string $description = null;
|
||||||
public ?string $filename = null;
|
public ?string $filename = null;
|
||||||
#[Assert\NotBlank]
|
public ?string $author = null;
|
||||||
public string $author = 'anonymous';
|
|
||||||
public ?\DateTimeImmutable $expirationDate;
|
public ?\DateTimeImmutable $expirationDate;
|
||||||
|
|
||||||
skobkin marked this conversation as resolved
skobkin
commented
Why Why `string` and `Assert\NotBlank`?
|
|||||||
public function __construct(?Paste $paste=null)
|
public function __construct(?Paste $paste = null)
|
||||||
{
|
{
|
||||||
skobkin marked this conversation as resolved
skobkin
commented
Is this validation being processed BEFORE storing the data in the DTO? Is this validation being processed BEFORE storing the data in the DTO?
If not, it's pointless as with `bool` field earlier.
|
|||||||
if ($paste === null)
|
if ($paste === null)
|
||||||
{
|
{
|
||||||
skobkin marked this conversation as resolved
skobkin
commented
Or you can make constructor Or you can make constructor `private`, use property promotion and add `fromPaste()` method to create it from the entity.
|
|||||||
|
@ -30,7 +29,7 @@ class PasteFormData
|
||||||
$this->language = $paste->language;
|
$this->language = $paste->language;
|
||||||
$this->description = $paste->description;
|
$this->description = $paste->description;
|
||||||
$this->filename = $paste->filename;
|
$this->filename = $paste->filename;
|
||||||
$this->author = $paste->author;
|
$this->author = $paste->author !== null ? $paste->author : 'anonymous';
|
||||||
$this->expirationDate = $paste->expirationDate;
|
$this->expirationDate = $paste->expirationDate;
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -23,8 +23,8 @@ class Paste
|
||||||
public readonly ?string $description,
|
public readonly ?string $description,
|
||||||
#[ORM\Column(type: 'string', length: 128, nullable: true)]
|
#[ORM\Column(type: 'string', length: 128, nullable: true)]
|
||||||
public readonly ?string $filename,
|
public readonly ?string $filename,
|
||||||
skobkin
commented
What type? Why 25 exactly? What type? Why 25 exactly?
skobkin
commented
Why 128? Why 128?
|
|||||||
#[ORM\Column(type: 'string', length: 128, nullable: false)]
|
#[ORM\Column(type: 'string', length: 128, nullable: true)]
|
||||||
public readonly string $author,
|
public readonly ?string $author,
|
||||||
skobkin marked this conversation as resolved
Outdated
skobkin
commented
Why not nullable? Why not nullable?
|
|||||||
#[ORM\Column(type: 'datetime_immutable', nullable: false)]
|
#[ORM\Column(type: 'datetime_immutable', nullable: false)]
|
||||||
public readonly \DateTimeImmutable $publishDate,
|
public readonly \DateTimeImmutable $publishDate,
|
||||||
#[ORM\Column(type: 'datetime_immutable', nullable: true)]
|
#[ORM\Column(type: 'datetime_immutable', nullable: true)]
|
||||||
|
|
|
@ -28,7 +28,7 @@ class PasteForm extends AbstractType
|
||||||
)
|
)
|
||||||
->add('description', TextType::class, ['required' => false])
|
->add('description', TextType::class, ['required' => false])
|
||||||
->add('text', TextareaType::class)
|
->add('text', TextareaType::class)
|
||||||
->add('author', TextType::class, ['attr' => ['maxlength' =>128]])
|
->add('author', TextType::class, ['attr' => ['maxlength' => 128], 'required' => false])
|
||||||
skobkin marked this conversation as resolved
Outdated
skobkin
commented
`required => false`?
|
|||||||
->add('filename', TextType::class, ['required' => false, 'attr' => ['maxlength' =>128]])
|
->add('filename', TextType::class, ['required' => false, 'attr' => ['maxlength' =>128]])
|
||||||
skobkin
commented
Why 128? Why 128?
|
|||||||
->add('expirationDate', DateTimeType::class, [
|
->add('expirationDate', DateTimeType::class, [
|
||||||
'required' => false,
|
'required' => false,
|
||||||
|
|
Loading…
Reference in a new issue
Do you need it here if it's empty?