add User entity, dto, repository interface

User holds email (EmailAddress vo), passwordHash, isAdmin - tide
keeps password and admin flag on the user row directly (no
separate profile entity like youngstartup). UserRepository
exposes find, findByEmail, create. CreateUserDto is readonly with
explicit isAdmin (per shared.md no-default-args rule).
This commit is contained in:
yisroel 2026-05-06 15:00:49 +03:00
parent f47ea1c73d
commit 533320fcac
Signed by: yisroelbaum
GPG key ID: 0FA60884F75520A9
3 changed files with 63 additions and 0 deletions

View file

@ -0,0 +1,14 @@
<?php
namespace App\User;
use App\Shared\ValueObject\EmailAddress;
readonly class CreateUserDto
{
public function __construct(
public EmailAddress $email,
public string $passwordHash,
public bool $isAdmin,
) {}
}

35
backend/app/User/User.php Normal file
View file

@ -0,0 +1,35 @@
<?php
namespace App\User;
use App\Shared\ValueObject\EmailAddress;
class User
{
public function __construct(
private int $id,
private EmailAddress $email,
private string $passwordHash,
private bool $isAdmin,
) {}
public function getId(): int
{
return $this->id;
}
public function getEmail(): EmailAddress
{
return $this->email;
}
public function getPasswordHash(): string
{
return $this->passwordHash;
}
public function isAdmin(): bool
{
return $this->isAdmin;
}
}

View file

@ -0,0 +1,14 @@
<?php
namespace App\User;
use App\Shared\ValueObject\EmailAddress;
interface UserRepository
{
public function create(CreateUserDto $dto): User;
public function find(int $id): ?User;
public function findByEmail(EmailAddress $email): ?User;
}