weedkeeper changes 2
This commit is contained in:
parent
c1ba50d533
commit
9565270c19
13
.env.example
13
.env.example
@ -10,6 +10,19 @@ DB_NAME_LOG=log
|
|||||||
# API Keys
|
# API Keys
|
||||||
TEMPLATE_API_KEY=
|
TEMPLATE_API_KEY=
|
||||||
|
|
||||||
|
# Mail
|
||||||
|
MAIL_DEFAULT_SENDER=template@stack-up.de
|
||||||
|
MAIL_DEFAULT_SENDER_NAME=Template
|
||||||
|
SMTP_USERNAME=
|
||||||
|
SMTP_PASSWORD=
|
||||||
|
SMTP_HOST=
|
||||||
|
SMTP_PORT=
|
||||||
|
SMTP_ENCRYPTION=ssl
|
||||||
|
|
||||||
|
# Notification
|
||||||
|
NOTIFICATION_HOST=
|
||||||
|
NOTIFICATION_ID=
|
||||||
|
|
||||||
# Template Setup
|
# Template Setup
|
||||||
INIT_USER_NAME=admin
|
INIT_USER_NAME=admin
|
||||||
INIT_USER_PASSWORD=password
|
INIT_USER_PASSWORD=password
|
||||||
|
|||||||
@ -15,11 +15,13 @@
|
|||||||
"symfony/cache": "5.4.8",
|
"symfony/cache": "5.4.8",
|
||||||
"doctrine/dbal": "^3.6",
|
"doctrine/dbal": "^3.6",
|
||||||
"teewurst/psr4-advanced-wildcard-composer-plugin": "^3.0",
|
"teewurst/psr4-advanced-wildcard-composer-plugin": "^3.0",
|
||||||
"laminas/laminas-crypt": "^3.10",
|
|
||||||
"monolog/monolog": "^3.4",
|
"monolog/monolog": "^3.4",
|
||||||
"laminas/laminas-mail": "^2.23",
|
|
||||||
"teewurst/pipeline": "^3.0",
|
"teewurst/pipeline": "^3.0",
|
||||||
"guzzlehttp/guzzle": "^7.8"
|
"guzzlehttp/guzzle": "^7.8",
|
||||||
|
"nette/mail": "^4.0",
|
||||||
|
"latte/latte": "^3.0",
|
||||||
|
"league/openapi-psr7-validator": "^0.22.0",
|
||||||
|
"symfony/finder": "^6.4"
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-4": {
|
"psr-4": {
|
||||||
@ -66,6 +68,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"config": {
|
"config": {
|
||||||
|
"process-timeout": 0,
|
||||||
"allow-plugins": {
|
"allow-plugins": {
|
||||||
"teewurst/psr4-advanced-wildcard-composer-plugin": true
|
"teewurst/psr4-advanced-wildcard-composer-plugin": true
|
||||||
}
|
}
|
||||||
|
|||||||
@ -58,7 +58,7 @@ $aggregator = new ConfigAggregator([
|
|||||||
|
|
||||||
// HandlingDomain
|
// HandlingDomain
|
||||||
\Template\Handling\User\ConfigProvider::class,
|
\Template\Handling\User\ConfigProvider::class,
|
||||||
\Template\Handling\UserSession\ConfigProvider::class,
|
\Template\Handling\Authentication\ConfigProvider::class,
|
||||||
\Template\Handling\Registration\ConfigProvider::class,
|
\Template\Handling\Registration\ConfigProvider::class,
|
||||||
|
|
||||||
// API
|
// API
|
||||||
|
|||||||
@ -1,5 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
use Template\API\Console\Command\ExportModelsCommand;
|
||||||
|
use Template\API\Console\Command\ExportSchemaCommand;
|
||||||
use Template\API\Console\Command\InitializeDataCommand;
|
use Template\API\Console\Command\InitializeDataCommand;
|
||||||
use Template\API\Console\Command\RbacUpdateCommand;
|
use Template\API\Console\Command\RbacUpdateCommand;
|
||||||
|
|
||||||
@ -7,5 +9,7 @@ return [
|
|||||||
'commands' => [
|
'commands' => [
|
||||||
InitializeDataCommand::class,
|
InitializeDataCommand::class,
|
||||||
RbacUpdateCommand::class,
|
RbacUpdateCommand::class,
|
||||||
|
ExportModelsCommand::class,
|
||||||
|
ExportSchemaCommand::class,
|
||||||
]
|
]
|
||||||
];
|
];
|
||||||
|
|||||||
@ -1,5 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
use Template\API\Console\Command\ExportModelsCommand;
|
||||||
|
use Template\API\Console\Command\ExportSchemaCommand;
|
||||||
use Template\API\Console\Command\InitializeDataCommand;
|
use Template\API\Console\Command\InitializeDataCommand;
|
||||||
use Template\API\Console\Command\RbacUpdateCommand;
|
use Template\API\Console\Command\RbacUpdateCommand;
|
||||||
use Reinfi\DependencyInjection\Factory\AutoWiringFactory;
|
use Reinfi\DependencyInjection\Factory\AutoWiringFactory;
|
||||||
@ -8,5 +10,7 @@ return [
|
|||||||
'factories' => [
|
'factories' => [
|
||||||
InitializeDataCommand::class => AutoWiringFactory::class,
|
InitializeDataCommand::class => AutoWiringFactory::class,
|
||||||
RbacUpdateCommand::class => AutoWiringFactory::class,
|
RbacUpdateCommand::class => AutoWiringFactory::class,
|
||||||
|
ExportModelsCommand::class => AutoWiringFactory::class,
|
||||||
|
ExportSchemaCommand::class => AutoWiringFactory::class,
|
||||||
],
|
],
|
||||||
];
|
];
|
||||||
|
|||||||
51
src/ApiDomain/Console/src/Command/ExportModelsCommand.php
Normal file
51
src/ApiDomain/Console/src/Command/ExportModelsCommand.php
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Template\API\Console\Command;
|
||||||
|
|
||||||
|
use Symfony\Component\Console\Attribute\AsCommand;
|
||||||
|
use Symfony\Component\Console\Command\Command;
|
||||||
|
use Symfony\Component\Console\Input\InputInterface;
|
||||||
|
use Symfony\Component\Console\Output\OutputInterface;
|
||||||
|
use Symfony\Component\Console\Style\SymfonyStyle;
|
||||||
|
use Throwable;
|
||||||
|
use Template\Infrastructure\Logging\Logger\Logger;
|
||||||
|
use Template\Infrastructure\Schema\Enum\SchemaType;
|
||||||
|
use Template\Infrastructure\Schema\Exporter\BackendExporter;
|
||||||
|
use Template\Infrastructure\Schema\Exporter\FrontendExporter;
|
||||||
|
use Template\Infrastructure\Schema\Model\Api;
|
||||||
|
use Template\Infrastructure\Schema\Model\Type;
|
||||||
|
use Template\Infrastructure\Schema\Reader\ApiDefinitionReader;
|
||||||
|
|
||||||
|
#[AsCommand(name: 'export:models', description: 'Creates an export file for all the models in the current schema definition')]
|
||||||
|
class ExportModelsCommand extends Command
|
||||||
|
{
|
||||||
|
public function __construct(
|
||||||
|
private readonly BackendExporter $backendExporter,
|
||||||
|
private readonly FrontendExporter $frontendExporter,
|
||||||
|
private readonly Logger $logger,
|
||||||
|
) {
|
||||||
|
parent::__construct($this->getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function execute(
|
||||||
|
InputInterface $input,
|
||||||
|
OutputInterface $output
|
||||||
|
): int {
|
||||||
|
$io = new SymfonyStyle($input, $output);
|
||||||
|
|
||||||
|
try {
|
||||||
|
$this->backendExporter->export();
|
||||||
|
|
||||||
|
$this->frontendExporter->export();
|
||||||
|
|
||||||
|
$io->success("OK!");
|
||||||
|
} catch (Throwable $e) {
|
||||||
|
$io->error($e->getMessage());
|
||||||
|
$io->error($e->getTraceAsString());
|
||||||
|
$this->logger->error($e->getMessage(), ['exception' => $e]);
|
||||||
|
return Command::FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return Command::SUCCESS;
|
||||||
|
}
|
||||||
|
}
|
||||||
46
src/ApiDomain/Console/src/Command/ExportSchemaCommand.php
Normal file
46
src/ApiDomain/Console/src/Command/ExportSchemaCommand.php
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Template\API\Console\Command;
|
||||||
|
|
||||||
|
use cebe\openapi\spec\OpenApi;
|
||||||
|
use Symfony\Component\Console\Attribute\AsCommand;
|
||||||
|
use Symfony\Component\Console\Command\Command;
|
||||||
|
use Symfony\Component\Console\Input\InputInterface;
|
||||||
|
use Symfony\Component\Console\Output\OutputInterface;
|
||||||
|
use Symfony\Component\Console\Style\SymfonyStyle;
|
||||||
|
use Throwable;
|
||||||
|
use Template\Infrastructure\Logging\Logger\Logger;
|
||||||
|
|
||||||
|
#[AsCommand(name: 'export:schema', description: 'Creates an export file for the current schema definitions')]
|
||||||
|
class ExportSchemaCommand extends Command
|
||||||
|
{
|
||||||
|
public function __construct(
|
||||||
|
private readonly OpenApi $schema,
|
||||||
|
private readonly Logger $logger,
|
||||||
|
) {
|
||||||
|
parent::__construct($this->getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function execute(
|
||||||
|
InputInterface $input,
|
||||||
|
OutputInterface $output
|
||||||
|
): int {
|
||||||
|
$io = new SymfonyStyle($input, $output);
|
||||||
|
|
||||||
|
try {
|
||||||
|
file_put_contents(
|
||||||
|
APP_ROOT . '/var/export/schema/api.export.json',
|
||||||
|
json_encode($this->schema->getSerializableData(), JSON_PRETTY_PRINT)
|
||||||
|
);
|
||||||
|
|
||||||
|
$io->success("OK!");
|
||||||
|
} catch (Throwable $e) {
|
||||||
|
$io->error($e->getMessage());
|
||||||
|
$io->error($e->getTraceAsString());
|
||||||
|
$this->logger->error($e->getMessage(), ['exception' => $e]);
|
||||||
|
return Command::FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return Command::SUCCESS;
|
||||||
|
}
|
||||||
|
}
|
||||||
36
src/ApiDomain/External/Api/config/routes.php
vendored
Normal file
36
src/ApiDomain/External/Api/config/routes.php
vendored
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Template\API\External\Api;
|
||||||
|
|
||||||
|
use Template\Infrastructure\Rbac\Middleware\EnsureAuthorizationMiddleware;
|
||||||
|
use Template\Infrastructure\Schema\Middleware\SchemaValidationMiddleware;
|
||||||
|
use Template\Infrastructure\Session\Middleware\LoggedInUserMiddleware;
|
||||||
|
use Template\API\External\Api\Health\HealthRequestHandler;
|
||||||
|
use Template\API\External\Api\Schema\SchemaRequestHandler;
|
||||||
|
|
||||||
|
return [
|
||||||
|
[
|
||||||
|
'name' => 'api.health',
|
||||||
|
'path' => '/api/health',
|
||||||
|
'allowed_methods' => ['GET'],
|
||||||
|
'middleware' => [
|
||||||
|
SchemaValidationMiddleware::class,
|
||||||
|
LoggedInUserMiddleware::class,
|
||||||
|
EnsureAuthorizationMiddleware::class,
|
||||||
|
HealthRequestHandler::class,
|
||||||
|
],
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'name' => 'api.schema',
|
||||||
|
'path' => '/api/schema',
|
||||||
|
'allowed_methods' => ['GET'],
|
||||||
|
'middleware' => [
|
||||||
|
SchemaValidationMiddleware::class,
|
||||||
|
LoggedInUserMiddleware::class,
|
||||||
|
EnsureAuthorizationMiddleware::class,
|
||||||
|
SchemaRequestHandler::class,
|
||||||
|
],
|
||||||
|
],
|
||||||
|
];
|
||||||
18
src/ApiDomain/External/Api/config/service_manager.php
vendored
Normal file
18
src/ApiDomain/External/Api/config/service_manager.php
vendored
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Template\API\External\Api;
|
||||||
|
|
||||||
|
use Reinfi\DependencyInjection\Factory\AutoWiringFactory;
|
||||||
|
use Template\API\External\Api\Health\HealthRequestHandler;
|
||||||
|
use Template\API\External\Api\Schema\SchemaRequestHandler;
|
||||||
|
|
||||||
|
return [
|
||||||
|
'factories' => [
|
||||||
|
/// Health
|
||||||
|
HealthRequestHandler::class => AutoWiringFactory::class,
|
||||||
|
/// Schema
|
||||||
|
SchemaRequestHandler::class => AutoWiringFactory::class,
|
||||||
|
]
|
||||||
|
];
|
||||||
16
src/ApiDomain/External/Api/src/ConfigProvider.php
vendored
Normal file
16
src/ApiDomain/External/Api/src/ConfigProvider.php
vendored
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Template\API\External\Api;
|
||||||
|
|
||||||
|
class ConfigProvider
|
||||||
|
{
|
||||||
|
public function __invoke(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'dependencies' => require __DIR__ . '/./../config/service_manager.php',
|
||||||
|
'routes' => require __DIR__ . '/./../config/routes.php',
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
23
src/ApiDomain/External/Api/src/Health/HealthRequestHandler.php
vendored
Normal file
23
src/ApiDomain/External/Api/src/Health/HealthRequestHandler.php
vendored
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Template\API\External\Api\Health;
|
||||||
|
|
||||||
|
use Psr\Http\Message\ResponseInterface;
|
||||||
|
use Psr\Http\Message\ServerRequestInterface;
|
||||||
|
use Psr\Http\Server\RequestHandlerInterface;
|
||||||
|
use Template\Infrastructure\Response\SuccessResponse;
|
||||||
|
use Template\Infrastructure\Request\Middleware\AnalyzeBodyMiddleware;
|
||||||
|
|
||||||
|
class HealthRequestHandler implements RequestHandlerInterface
|
||||||
|
{
|
||||||
|
public function __construct(
|
||||||
|
) {
|
||||||
|
}
|
||||||
|
|
||||||
|
public function handle(ServerRequestInterface $request): ResponseInterface
|
||||||
|
{
|
||||||
|
return new SuccessResponse("I'm fine. :)");
|
||||||
|
}
|
||||||
|
}
|
||||||
29
src/ApiDomain/External/Api/src/Schema/SchemaRequestHandler.php
vendored
Normal file
29
src/ApiDomain/External/Api/src/Schema/SchemaRequestHandler.php
vendored
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Template\API\External\Api\Schema;
|
||||||
|
|
||||||
|
use cebe\openapi\spec\OpenApi;
|
||||||
|
use Psr\Http\Message\ResponseInterface;
|
||||||
|
use Psr\Http\Message\ServerRequestInterface;
|
||||||
|
use Psr\Http\Server\RequestHandlerInterface;
|
||||||
|
use Template\Infrastructure\Response\SuccessResponse;
|
||||||
|
|
||||||
|
class SchemaRequestHandler implements RequestHandlerInterface
|
||||||
|
{
|
||||||
|
public function __construct(
|
||||||
|
private readonly OpenApi $schema,
|
||||||
|
) {
|
||||||
|
}
|
||||||
|
|
||||||
|
public function handle(ServerRequestInterface $request): ResponseInterface
|
||||||
|
{
|
||||||
|
$response = json_decode(
|
||||||
|
json_encode($this->schema->getSerializableData()),
|
||||||
|
true
|
||||||
|
);
|
||||||
|
|
||||||
|
return new SuccessResponse($response);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,10 +1,13 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
use Template\API\External\Authentication\Handler\ConfirmRegistrationHandler;
|
use Template\Infrastructure\Schema\Middleware\SchemaValidationMiddleware;
|
||||||
use Template\API\External\Authentication\Handler\LoginUserHandler;
|
|
||||||
use Template\API\External\Authentication\Handler\LogoutUserHandler;
|
|
||||||
use Template\API\External\Authentication\Handler\RegisterUserHandler;
|
|
||||||
use Template\Infrastructure\Session\Middleware\LoggedInUserMiddleware;
|
use Template\Infrastructure\Session\Middleware\LoggedInUserMiddleware;
|
||||||
|
use Template\API\External\Authentication\LoginUser\LoginUserRequestHandler;
|
||||||
|
use Template\API\External\Authentication\LogoutUser\LogoutUserRequestHandler;
|
||||||
|
use Template\API\External\Authentication\ConfirmRegistration\ConfirmRegistrationRequestHandler;
|
||||||
|
use Template\API\External\Authentication\RegisterUser\RegisterUserRequestHandler;
|
||||||
|
use Template\API\External\Authentication\ForgotPassword\ForgotPasswordRequestHandler;
|
||||||
|
use Template\API\External\Authentication\ResetPassword\ResetPasswordRequestHandler;
|
||||||
|
|
||||||
return [
|
return [
|
||||||
[
|
[
|
||||||
@ -12,16 +15,18 @@ return [
|
|||||||
'path' => '/api/auth/login-user',
|
'path' => '/api/auth/login-user',
|
||||||
'allowed_methods' => ['POST'],
|
'allowed_methods' => ['POST'],
|
||||||
'middleware' => [
|
'middleware' => [
|
||||||
LoginUserHandler::class
|
SchemaValidationMiddleware::class,
|
||||||
|
LoginUserRequestHandler::class,
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
'name' => 'auth.logout-user',
|
'name' => 'auth.logout-user',
|
||||||
'path' => '/api/auth/logout-user',
|
'path' => '/api/auth/logout-user',
|
||||||
'allowed_methods' => ['POST'],
|
'allowed_methods' => ['GET'],
|
||||||
'middleware' => [
|
'middleware' => [
|
||||||
|
SchemaValidationMiddleware::class,
|
||||||
LoggedInUserMiddleware::class,
|
LoggedInUserMiddleware::class,
|
||||||
LogoutUserHandler::class
|
LogoutUserRequestHandler::class,
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
@ -29,7 +34,8 @@ return [
|
|||||||
'path' => '/api/auth/confirm-registration',
|
'path' => '/api/auth/confirm-registration',
|
||||||
'allowed_methods' => ['POST'],
|
'allowed_methods' => ['POST'],
|
||||||
'middleware' => [
|
'middleware' => [
|
||||||
ConfirmRegistrationHandler::class
|
SchemaValidationMiddleware::class,
|
||||||
|
ConfirmRegistrationRequestHandler::class,
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
@ -37,7 +43,26 @@ return [
|
|||||||
'path' => '/api/auth/register-user',
|
'path' => '/api/auth/register-user',
|
||||||
'allowed_methods' => ['POST'],
|
'allowed_methods' => ['POST'],
|
||||||
'middleware' => [
|
'middleware' => [
|
||||||
RegisterUserHandler::class
|
SchemaValidationMiddleware::class,
|
||||||
|
RegisterUserRequestHandler::class,
|
||||||
|
],
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'name' => 'auth.forgot-password',
|
||||||
|
'path' => '/api/auth/forgot-password',
|
||||||
|
'allowed_methods' => ['POST'],
|
||||||
|
'middleware' => [
|
||||||
|
SchemaValidationMiddleware::class,
|
||||||
|
ForgotPasswordRequestHandler::class,
|
||||||
|
],
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'name' => 'auth.reset-password',
|
||||||
|
'path' => '/api/auth/reset-password',
|
||||||
|
'allowed_methods' => ['POST'],
|
||||||
|
'middleware' => [
|
||||||
|
SchemaValidationMiddleware::class,
|
||||||
|
ResetPasswordRequestHandler::class,
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
];
|
];
|
||||||
@ -1,17 +1,39 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
use Template\API\External\Authentication\Handler\ConfirmRegistrationHandler;
|
|
||||||
use Template\API\External\Authentication\Handler\LoginUserHandler;
|
|
||||||
use Template\API\External\Authentication\Handler\LogoutUserHandler;
|
|
||||||
use Template\API\External\Authentication\Handler\RegisterUserHandler;
|
|
||||||
use Reinfi\DependencyInjection\Factory\AutoWiringFactory;
|
use Reinfi\DependencyInjection\Factory\AutoWiringFactory;
|
||||||
|
use Reinfi\DependencyInjection\Factory\InjectionFactory;
|
||||||
|
use Template\API\External\Authentication\LoginUser\LoginUserResponseFormatter;
|
||||||
|
use Template\API\External\Authentication\LoginUser\LoginUserRequestHandler;
|
||||||
|
use Template\API\External\Authentication\LogoutUser\LogoutUserResponseFormatter;
|
||||||
|
use Template\API\External\Authentication\LogoutUser\LogoutUserRequestHandler;
|
||||||
|
use Template\API\External\Authentication\ConfirmRegistration\ConfirmRegistrationResponseFormatter;
|
||||||
|
use Template\API\External\Authentication\ConfirmRegistration\ConfirmRegistrationRequestHandler;
|
||||||
|
use Template\API\External\Authentication\RegisterUser\RegisterUserResponseFormatter;
|
||||||
|
use Template\API\External\Authentication\RegisterUser\RegisterUserRequestHandler;
|
||||||
|
use Template\API\External\Authentication\ForgotPassword\ForgotPasswordResponseFormatter;
|
||||||
|
use Template\API\External\Authentication\ForgotPassword\ForgotPasswordRequestHandler;
|
||||||
|
use Template\API\External\Authentication\ResetPassword\ResetPasswordResponseFormatter;
|
||||||
|
use Template\API\External\Authentication\ResetPassword\ResetPasswordRequestHandler;
|
||||||
|
|
||||||
return [
|
return [
|
||||||
'factories' => [
|
'factories' => [
|
||||||
// Handler
|
/// LoginUser
|
||||||
LoginUserHandler::class => AutoWiringFactory::class,
|
LoginUserResponseFormatter::class => AutoWiringFactory::class,
|
||||||
LogoutUserHandler::class => AutoWiringFactory::class,
|
LoginUserRequestHandler::class => AutoWiringFactory::class,
|
||||||
ConfirmRegistrationHandler::class => AutoWiringFactory::class,
|
/// LogoutUser
|
||||||
RegisterUserHandler::class => AutoWiringFactory::class
|
LogoutUserResponseFormatter::class => AutoWiringFactory::class,
|
||||||
|
LogoutUserRequestHandler::class => AutoWiringFactory::class,
|
||||||
|
/// ConfirmRegistration
|
||||||
|
ConfirmRegistrationResponseFormatter::class => AutoWiringFactory::class,
|
||||||
|
ConfirmRegistrationRequestHandler::class => AutoWiringFactory::class,
|
||||||
|
/// RegisterUser
|
||||||
|
RegisterUserResponseFormatter::class => AutoWiringFactory::class,
|
||||||
|
RegisterUserRequestHandler::class => AutoWiringFactory::class,
|
||||||
|
/// ForgotPassword
|
||||||
|
ForgotPasswordResponseFormatter::class => AutoWiringFactory::class,
|
||||||
|
ForgotPasswordRequestHandler::class => AutoWiringFactory::class,
|
||||||
|
/// ResetPassword
|
||||||
|
ResetPasswordResponseFormatter::class => AutoWiringFactory::class,
|
||||||
|
ResetPasswordRequestHandler::class => AutoWiringFactory::class,
|
||||||
],
|
],
|
||||||
];
|
];
|
||||||
|
|||||||
@ -0,0 +1,40 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Template\API\External\Authentication\ConfirmRegistration;
|
||||||
|
|
||||||
|
use Ramsey\Uuid\Uuid;
|
||||||
|
use Psr\Http\Message\ResponseInterface;
|
||||||
|
use Psr\Http\Message\ServerRequestInterface;
|
||||||
|
use Psr\Http\Server\RequestHandlerInterface;
|
||||||
|
use Template\Infrastructure\Response\SuccessResponse;
|
||||||
|
use Template\Infrastructure\Request\Middleware\AnalyzeBodyMiddleware;
|
||||||
|
use Template\Handling\Registration\UseCase\ConfirmRegistration\ConfirmRegistrationUseCaseHandler;
|
||||||
|
use Template\Handling\Registration\UseCase\ConfirmRegistration\ConfirmRegistrationUseCaseBuilder;
|
||||||
|
use Template\API\External\Authentication\ConfirmRegistration\ConfirmRegistrationResponseFormatter;
|
||||||
|
|
||||||
|
class ConfirmRegistrationRequestHandler implements RequestHandlerInterface
|
||||||
|
{
|
||||||
|
public function __construct(
|
||||||
|
private readonly ConfirmRegistrationUseCaseBuilder $builder,
|
||||||
|
private readonly ConfirmRegistrationUseCaseHandler $handler,
|
||||||
|
private readonly ConfirmRegistrationResponseFormatter $responseFormatter,
|
||||||
|
) {
|
||||||
|
}
|
||||||
|
|
||||||
|
public function handle(ServerRequestInterface $request): ResponseInterface
|
||||||
|
{
|
||||||
|
$data = $request->getAttribute(AnalyzeBodyMiddleware::JSON_DATA);
|
||||||
|
|
||||||
|
$useCase = $this->builder->build(
|
||||||
|
Uuid::fromString($data['id']),
|
||||||
|
$data['password'],
|
||||||
|
$data['passwordConfirmation'],
|
||||||
|
);
|
||||||
|
$result = $this->handler->handle($useCase);
|
||||||
|
|
||||||
|
$response = $this->responseFormatter->format($result);
|
||||||
|
return new SuccessResponse($response);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,31 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Template\API\External\Authentication\ConfirmRegistration;
|
||||||
|
|
||||||
|
use DateTimeInterface;
|
||||||
|
use Ramsey\Uuid\Uuid;
|
||||||
|
use Template\Handling\Registration\UseCase\ConfirmRegistration\ConfirmRegistrationUseCaseResult;
|
||||||
|
|
||||||
|
class ConfirmRegistrationResponseFormatter
|
||||||
|
{
|
||||||
|
public function format(ConfirmRegistrationUseCaseResult $result): array
|
||||||
|
{
|
||||||
|
$user = $result->getUser();
|
||||||
|
|
||||||
|
$permissions = [];
|
||||||
|
foreach ($user->getRole()->getPermissions()->toArray() as $permission) {
|
||||||
|
$permissions[] = $permission->getIdentifier();
|
||||||
|
}
|
||||||
|
|
||||||
|
return [
|
||||||
|
'id' => $user->getId()->toString(),
|
||||||
|
'username' => $user->getUsername(),
|
||||||
|
'role' => $user->getRole()->getIdentifier(),
|
||||||
|
'permissions' => $permissions,
|
||||||
|
'created' => $user->getCreatedAt()->format(DateTimeInterface::RFC3339),
|
||||||
|
'updated' => $user->getUpdatedAt()->format(DateTimeInterface::RFC3339)
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
37
src/ApiDomain/External/Authentication/src/ForgotPassword/ForgotPasswordRequestHandler.php
vendored
Normal file
37
src/ApiDomain/External/Authentication/src/ForgotPassword/ForgotPasswordRequestHandler.php
vendored
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Template\API\External\Authentication\ForgotPassword;
|
||||||
|
|
||||||
|
use Psr\Http\Message\ResponseInterface;
|
||||||
|
use Psr\Http\Message\ServerRequestInterface;
|
||||||
|
use Psr\Http\Server\RequestHandlerInterface;
|
||||||
|
use Template\Infrastructure\Response\SuccessResponse;
|
||||||
|
use Template\Infrastructure\Request\Middleware\AnalyzeBodyMiddleware;
|
||||||
|
use Template\Handling\Authentication\UseCase\ForgotPassword\ForgotPasswordUseCaseHandler;
|
||||||
|
use Template\Handling\Authentication\UseCase\ForgotPassword\ForgotPasswordUseCaseBuilder;
|
||||||
|
use Template\API\External\Authentication\ForgotPassword\ForgotPasswordResponseFormatter;
|
||||||
|
|
||||||
|
class ForgotPasswordRequestHandler implements RequestHandlerInterface
|
||||||
|
{
|
||||||
|
public function __construct(
|
||||||
|
private readonly ForgotPasswordUseCaseBuilder $builder,
|
||||||
|
private readonly ForgotPasswordUseCaseHandler $handler,
|
||||||
|
private readonly ForgotPasswordResponseFormatter $responseFormatter,
|
||||||
|
) {
|
||||||
|
}
|
||||||
|
|
||||||
|
public function handle(ServerRequestInterface $request): ResponseInterface
|
||||||
|
{
|
||||||
|
$data = $request->getAttribute(AnalyzeBodyMiddleware::JSON_DATA);
|
||||||
|
|
||||||
|
$useCase = $this->builder->build(
|
||||||
|
$data['mail'],
|
||||||
|
);
|
||||||
|
$result = $this->handler->handle($useCase);
|
||||||
|
|
||||||
|
$response = $this->responseFormatter->format($result);
|
||||||
|
return new SuccessResponse($response);
|
||||||
|
}
|
||||||
|
}
|
||||||
16
src/ApiDomain/External/Authentication/src/ForgotPassword/ForgotPasswordResponseFormatter.php
vendored
Normal file
16
src/ApiDomain/External/Authentication/src/ForgotPassword/ForgotPasswordResponseFormatter.php
vendored
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Template\API\External\Authentication\ForgotPassword;
|
||||||
|
|
||||||
|
use Template\Handling\Authentication\UseCase\ForgotPassword\ForgotPasswordUseCaseResult;
|
||||||
|
|
||||||
|
class ForgotPasswordResponseFormatter
|
||||||
|
{
|
||||||
|
public function format(ForgotPasswordUseCaseResult $result): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,44 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
declare(strict_types=1);
|
|
||||||
|
|
||||||
namespace Template\API\External\Authentication\Handler;
|
|
||||||
|
|
||||||
use Template\API\External\User\Formatter\UserFormatter;
|
|
||||||
use Template\Handling\Registration\Handler\Command\ConfirmRegistration\ConfirmRegistrationCommandBuilder;
|
|
||||||
use Template\Handling\Registration\Handler\Command\ConfirmRegistration\ConfirmRegistrationCommandHandler;
|
|
||||||
use Template\Infrastructure\Session\Middleware\SessionMiddleware;
|
|
||||||
use Laminas\Diactoros\Response\JsonResponse;
|
|
||||||
use Psr\Http\Message\ResponseInterface;
|
|
||||||
use Psr\Http\Message\ServerRequestInterface;
|
|
||||||
use Psr\Http\Server\RequestHandlerInterface;
|
|
||||||
use Ramsey\Uuid\Uuid;
|
|
||||||
|
|
||||||
class ConfirmRegistrationHandler implements RequestHandlerInterface
|
|
||||||
{
|
|
||||||
public function __construct(
|
|
||||||
private readonly ConfirmRegistrationCommandHandler $handler,
|
|
||||||
private readonly ConfirmRegistrationCommandBuilder $builder,
|
|
||||||
private readonly UserFormatter $userFormatter
|
|
||||||
) {
|
|
||||||
}
|
|
||||||
|
|
||||||
public function handle(ServerRequestInterface $request): ResponseInterface
|
|
||||||
{
|
|
||||||
$data = json_decode(
|
|
||||||
$request->getBody()->getContents(),
|
|
||||||
true
|
|
||||||
);
|
|
||||||
|
|
||||||
$query = $this->builder->build(
|
|
||||||
Uuid::fromString($data['id']),
|
|
||||||
$data['password'],
|
|
||||||
$data['passwordConfirmation'],
|
|
||||||
);
|
|
||||||
|
|
||||||
$result = $this->handler->execute($query);
|
|
||||||
return new JsonResponse(
|
|
||||||
$this->userFormatter->format($result)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,42 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
declare(strict_types=1);
|
|
||||||
|
|
||||||
namespace Template\API\External\Authentication\Handler;
|
|
||||||
|
|
||||||
use Template\Handling\UserSession\Handler\Command\LoginUser\LoginUserCommandBuilder;
|
|
||||||
use Template\Handling\UserSession\Handler\Command\LoginUser\LoginUserCommandHandler;
|
|
||||||
use Template\Infrastructure\Session\Middleware\SessionMiddleware;
|
|
||||||
use Laminas\Diactoros\Response\JsonResponse;
|
|
||||||
use Psr\Http\Message\ResponseInterface;
|
|
||||||
use Psr\Http\Message\ServerRequestInterface;
|
|
||||||
use Psr\Http\Server\RequestHandlerInterface;
|
|
||||||
|
|
||||||
class LoginUserHandler implements RequestHandlerInterface
|
|
||||||
{
|
|
||||||
public function __construct(
|
|
||||||
private readonly LoginUserCommandHandler $handler,
|
|
||||||
private readonly LoginUserCommandBuilder $builder
|
|
||||||
) {
|
|
||||||
}
|
|
||||||
|
|
||||||
public function handle(ServerRequestInterface $request): ResponseInterface
|
|
||||||
{
|
|
||||||
$session = $request->getAttribute(SessionMiddleware::SESSION_ATTRIBUTE);
|
|
||||||
$data = json_decode(
|
|
||||||
$request->getBody()->getContents(),
|
|
||||||
true
|
|
||||||
);
|
|
||||||
|
|
||||||
$query = $this->builder->build(
|
|
||||||
$session,
|
|
||||||
$data['identifier'],
|
|
||||||
$data['password'],
|
|
||||||
);
|
|
||||||
|
|
||||||
$result = $this->handler->execute($query);
|
|
||||||
return new JsonResponse([
|
|
||||||
'sessionId' => $result->getId()->toString()
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,35 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
declare(strict_types=1);
|
|
||||||
|
|
||||||
namespace Template\API\External\Authentication\Handler;
|
|
||||||
|
|
||||||
use Template\Handling\UserSession\Handler\Command\LogoutUser\LogoutUserCommandBuilder;
|
|
||||||
use Template\Handling\UserSession\Handler\Command\LogoutUser\LogoutUserCommandHandler;
|
|
||||||
use Template\Infrastructure\Response\SuccessResponse;
|
|
||||||
use Template\Infrastructure\Session\Middleware\SessionMiddleware;
|
|
||||||
use Laminas\Diactoros\Response\JsonResponse;
|
|
||||||
use Psr\Http\Message\ResponseInterface;
|
|
||||||
use Psr\Http\Message\ServerRequestInterface;
|
|
||||||
use Psr\Http\Server\RequestHandlerInterface;
|
|
||||||
|
|
||||||
class LogoutUserHandler implements RequestHandlerInterface
|
|
||||||
{
|
|
||||||
public function __construct(
|
|
||||||
private readonly LogoutUserCommandHandler $handler,
|
|
||||||
private readonly LogoutUserCommandBuilder $builder
|
|
||||||
) {
|
|
||||||
}
|
|
||||||
|
|
||||||
public function handle(ServerRequestInterface $request): ResponseInterface
|
|
||||||
{
|
|
||||||
$session = $request->getAttribute(SessionMiddleware::SESSION_ATTRIBUTE);
|
|
||||||
|
|
||||||
$query = $this->builder->build(
|
|
||||||
$session
|
|
||||||
);
|
|
||||||
$this->handler->execute($query);
|
|
||||||
|
|
||||||
return new JsonResponse('OK');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,41 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
declare(strict_types=1);
|
|
||||||
|
|
||||||
namespace Template\API\External\Authentication\Handler;
|
|
||||||
|
|
||||||
use Psr\Http\Message\ResponseInterface;
|
|
||||||
use Psr\Http\Message\ServerRequestInterface;
|
|
||||||
use Psr\Http\Server\RequestHandlerInterface;
|
|
||||||
use Template\Handling\Registration\Handler\Command\RegisterUser\RegisterUserCommandBuilder;
|
|
||||||
use Template\Handling\Registration\Handler\Command\RegisterUser\RegisterUserCommandHandler;
|
|
||||||
use Template\Infrastructure\Logging\Logger\Logger;
|
|
||||||
use Template\Infrastructure\Request\Middleware\AnalyzeHeaderMiddleware;
|
|
||||||
use Template\Infrastructure\Response\SuccessResponse;
|
|
||||||
|
|
||||||
class RegisterUserHandler implements RequestHandlerInterface
|
|
||||||
{
|
|
||||||
public function __construct(
|
|
||||||
private readonly RegisterUserCommandHandler $handler,
|
|
||||||
private readonly RegisterUserCommandBuilder $builder
|
|
||||||
) {
|
|
||||||
}
|
|
||||||
|
|
||||||
public function handle(ServerRequestInterface $request): ResponseInterface
|
|
||||||
{
|
|
||||||
$host = $request->getAttribute(AnalyzeHeaderMiddleware::HOST_ATTRIBUTE);
|
|
||||||
$data = json_decode(
|
|
||||||
$request->getBody()->getContents(),
|
|
||||||
true
|
|
||||||
);
|
|
||||||
|
|
||||||
$query = $this->builder->build(
|
|
||||||
$data['username'],
|
|
||||||
$data['mail'],
|
|
||||||
$host
|
|
||||||
);
|
|
||||||
|
|
||||||
$this->handler->execute($query);
|
|
||||||
return new SuccessResponse();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
41
src/ApiDomain/External/Authentication/src/LoginUser/LoginUserRequestHandler.php
vendored
Normal file
41
src/ApiDomain/External/Authentication/src/LoginUser/LoginUserRequestHandler.php
vendored
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Template\API\External\Authentication\LoginUser;
|
||||||
|
|
||||||
|
use Psr\Http\Message\ResponseInterface;
|
||||||
|
use Psr\Http\Message\ServerRequestInterface;
|
||||||
|
use Psr\Http\Server\RequestHandlerInterface;
|
||||||
|
use Template\Infrastructure\Response\SuccessResponse;
|
||||||
|
use Template\Infrastructure\Request\Middleware\AnalyzeBodyMiddleware;
|
||||||
|
use Template\Handling\Authentication\UseCase\LoginUser\LoginUserUseCaseHandler;
|
||||||
|
use Template\Handling\Authentication\UseCase\LoginUser\LoginUserUseCaseBuilder;
|
||||||
|
use Template\API\External\Authentication\LoginUser\LoginUserResponseFormatter;
|
||||||
|
use Template\Infrastructure\Session\Middleware\SessionMiddleware;
|
||||||
|
|
||||||
|
class LoginUserRequestHandler implements RequestHandlerInterface
|
||||||
|
{
|
||||||
|
public function __construct(
|
||||||
|
private readonly LoginUserUseCaseBuilder $builder,
|
||||||
|
private readonly LoginUserUseCaseHandler $handler,
|
||||||
|
private readonly LoginUserResponseFormatter $responseFormatter,
|
||||||
|
) {
|
||||||
|
}
|
||||||
|
|
||||||
|
public function handle(ServerRequestInterface $request): ResponseInterface
|
||||||
|
{
|
||||||
|
$session = $request->getAttribute(SessionMiddleware::SESSION_ATTRIBUTE);
|
||||||
|
$data = $request->getAttribute(AnalyzeBodyMiddleware::JSON_DATA);
|
||||||
|
|
||||||
|
$useCase = $this->builder->build(
|
||||||
|
$session,
|
||||||
|
$data['identifier'],
|
||||||
|
$data['password'],
|
||||||
|
);
|
||||||
|
$result = $this->handler->handle($useCase);
|
||||||
|
|
||||||
|
$response = $this->responseFormatter->format($result);
|
||||||
|
return new SuccessResponse($response);
|
||||||
|
}
|
||||||
|
}
|
||||||
18
src/ApiDomain/External/Authentication/src/LoginUser/LoginUserResponseFormatter.php
vendored
Normal file
18
src/ApiDomain/External/Authentication/src/LoginUser/LoginUserResponseFormatter.php
vendored
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Template\API\External\Authentication\LoginUser;
|
||||||
|
|
||||||
|
use Ramsey\Uuid\Uuid;
|
||||||
|
use Template\Handling\Authentication\UseCase\LoginUser\LoginUserUseCaseResult;
|
||||||
|
|
||||||
|
class LoginUserResponseFormatter
|
||||||
|
{
|
||||||
|
public function format(LoginUserUseCaseResult $result): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'sessionId' => $result->getSession()->getId()
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
39
src/ApiDomain/External/Authentication/src/LogoutUser/LogoutUserRequestHandler.php
vendored
Normal file
39
src/ApiDomain/External/Authentication/src/LogoutUser/LogoutUserRequestHandler.php
vendored
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Template\API\External\Authentication\LogoutUser;
|
||||||
|
|
||||||
|
use Psr\Http\Message\ResponseInterface;
|
||||||
|
use Psr\Http\Message\ServerRequestInterface;
|
||||||
|
use Psr\Http\Server\RequestHandlerInterface;
|
||||||
|
use Template\Infrastructure\Response\SuccessResponse;
|
||||||
|
use Template\Infrastructure\Request\Middleware\AnalyzeBodyMiddleware;
|
||||||
|
use Template\Handling\Authentication\UseCase\LogoutUser\LogoutUserUseCaseHandler;
|
||||||
|
use Template\Handling\Authentication\UseCase\LogoutUser\LogoutUserUseCaseBuilder;
|
||||||
|
use Template\API\External\Authentication\LogoutUser\LogoutUserResponseFormatter;
|
||||||
|
use Template\Infrastructure\Session\Middleware\SessionMiddleware;
|
||||||
|
|
||||||
|
class LogoutUserRequestHandler implements RequestHandlerInterface
|
||||||
|
{
|
||||||
|
public function __construct(
|
||||||
|
private readonly LogoutUserUseCaseBuilder $builder,
|
||||||
|
private readonly LogoutUserUseCaseHandler $handler,
|
||||||
|
private readonly LogoutUserResponseFormatter $responseFormatter,
|
||||||
|
) {
|
||||||
|
}
|
||||||
|
|
||||||
|
public function handle(ServerRequestInterface $request): ResponseInterface
|
||||||
|
{
|
||||||
|
$session = $request->getAttribute(SessionMiddleware::SESSION_ATTRIBUTE);
|
||||||
|
$data = $request->getAttribute(AnalyzeBodyMiddleware::JSON_DATA);
|
||||||
|
|
||||||
|
$useCase = $this->builder->build(
|
||||||
|
$session,
|
||||||
|
);
|
||||||
|
$result = $this->handler->handle($useCase);
|
||||||
|
|
||||||
|
$response = $this->responseFormatter->format($result);
|
||||||
|
return new SuccessResponse($response);
|
||||||
|
}
|
||||||
|
}
|
||||||
16
src/ApiDomain/External/Authentication/src/LogoutUser/LogoutUserResponseFormatter.php
vendored
Normal file
16
src/ApiDomain/External/Authentication/src/LogoutUser/LogoutUserResponseFormatter.php
vendored
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Template\API\External\Authentication\LogoutUser;
|
||||||
|
|
||||||
|
use Template\Handling\Authentication\UseCase\LogoutUser\LogoutUserUseCaseResult;
|
||||||
|
|
||||||
|
class LogoutUserResponseFormatter
|
||||||
|
{
|
||||||
|
public function format(LogoutUserUseCaseResult $result): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
38
src/ApiDomain/External/Authentication/src/RegisterUser/RegisterUserRequestHandler.php
vendored
Normal file
38
src/ApiDomain/External/Authentication/src/RegisterUser/RegisterUserRequestHandler.php
vendored
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Template\API\External\Authentication\RegisterUser;
|
||||||
|
|
||||||
|
use Psr\Http\Message\ResponseInterface;
|
||||||
|
use Psr\Http\Message\ServerRequestInterface;
|
||||||
|
use Psr\Http\Server\RequestHandlerInterface;
|
||||||
|
use Template\Infrastructure\Response\SuccessResponse;
|
||||||
|
use Template\Infrastructure\Request\Middleware\AnalyzeBodyMiddleware;
|
||||||
|
use Template\Handling\Registration\UseCase\RegisterUser\RegisterUserUseCaseHandler;
|
||||||
|
use Template\Handling\Registration\UseCase\RegisterUser\RegisterUserUseCaseBuilder;
|
||||||
|
use Template\API\External\Authentication\RegisterUser\RegisterUserResponseFormatter;
|
||||||
|
|
||||||
|
class RegisterUserRequestHandler implements RequestHandlerInterface
|
||||||
|
{
|
||||||
|
public function __construct(
|
||||||
|
private readonly RegisterUserUseCaseBuilder $builder,
|
||||||
|
private readonly RegisterUserUseCaseHandler $handler,
|
||||||
|
private readonly RegisterUserResponseFormatter $responseFormatter,
|
||||||
|
) {
|
||||||
|
}
|
||||||
|
|
||||||
|
public function handle(ServerRequestInterface $request): ResponseInterface
|
||||||
|
{
|
||||||
|
$data = $request->getAttribute(AnalyzeBodyMiddleware::JSON_DATA);
|
||||||
|
|
||||||
|
$useCase = $this->builder->build(
|
||||||
|
$data['username'],
|
||||||
|
$data['mail'],
|
||||||
|
);
|
||||||
|
$result = $this->handler->handle($useCase);
|
||||||
|
|
||||||
|
$response = $this->responseFormatter->format($result);
|
||||||
|
return new SuccessResponse($response);
|
||||||
|
}
|
||||||
|
}
|
||||||
16
src/ApiDomain/External/Authentication/src/RegisterUser/RegisterUserResponseFormatter.php
vendored
Normal file
16
src/ApiDomain/External/Authentication/src/RegisterUser/RegisterUserResponseFormatter.php
vendored
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Template\API\External\Authentication\RegisterUser;
|
||||||
|
|
||||||
|
use Template\Handling\Registration\UseCase\RegisterUser\RegisterUserUseCaseResult;
|
||||||
|
|
||||||
|
class RegisterUserResponseFormatter
|
||||||
|
{
|
||||||
|
public function format(RegisterUserUseCaseResult $result): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
40
src/ApiDomain/External/Authentication/src/ResetPassword/ResetPasswordRequestHandler.php
vendored
Normal file
40
src/ApiDomain/External/Authentication/src/ResetPassword/ResetPasswordRequestHandler.php
vendored
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Template\API\External\Authentication\ResetPassword;
|
||||||
|
|
||||||
|
use Ramsey\Uuid\Uuid;
|
||||||
|
use Psr\Http\Message\ResponseInterface;
|
||||||
|
use Psr\Http\Message\ServerRequestInterface;
|
||||||
|
use Psr\Http\Server\RequestHandlerInterface;
|
||||||
|
use Template\Infrastructure\Response\SuccessResponse;
|
||||||
|
use Template\Infrastructure\Request\Middleware\AnalyzeBodyMiddleware;
|
||||||
|
use Template\Handling\Authentication\UseCase\ResetPassword\ResetPasswordUseCaseHandler;
|
||||||
|
use Template\Handling\Authentication\UseCase\ResetPassword\ResetPasswordUseCaseBuilder;
|
||||||
|
use Template\API\External\Authentication\ResetPassword\ResetPasswordResponseFormatter;
|
||||||
|
|
||||||
|
class ResetPasswordRequestHandler implements RequestHandlerInterface
|
||||||
|
{
|
||||||
|
public function __construct(
|
||||||
|
private readonly ResetPasswordUseCaseBuilder $builder,
|
||||||
|
private readonly ResetPasswordUseCaseHandler $handler,
|
||||||
|
private readonly ResetPasswordResponseFormatter $responseFormatter,
|
||||||
|
) {
|
||||||
|
}
|
||||||
|
|
||||||
|
public function handle(ServerRequestInterface $request): ResponseInterface
|
||||||
|
{
|
||||||
|
$data = $request->getAttribute(AnalyzeBodyMiddleware::JSON_DATA);
|
||||||
|
|
||||||
|
$useCase = $this->builder->build(
|
||||||
|
Uuid::fromString($data['passwordToken']),
|
||||||
|
$data['newPassword'],
|
||||||
|
$data['passwordConfirmation'],
|
||||||
|
);
|
||||||
|
$result = $this->handler->handle($useCase);
|
||||||
|
|
||||||
|
$response = $this->responseFormatter->format($result);
|
||||||
|
return new SuccessResponse($response);
|
||||||
|
}
|
||||||
|
}
|
||||||
16
src/ApiDomain/External/Authentication/src/ResetPassword/ResetPasswordResponseFormatter.php
vendored
Normal file
16
src/ApiDomain/External/Authentication/src/ResetPassword/ResetPasswordResponseFormatter.php
vendored
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Template\API\External\Authentication\ResetPassword;
|
||||||
|
|
||||||
|
use Template\Handling\Authentication\UseCase\ResetPassword\ResetPasswordUseCaseResult;
|
||||||
|
|
||||||
|
class ResetPasswordResponseFormatter
|
||||||
|
{
|
||||||
|
public function format(ResetPasswordUseCaseResult $result): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
16
src/ApiDomain/External/Health/config/routes.php
vendored
16
src/ApiDomain/External/Health/config/routes.php
vendored
@ -1,16 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
use Template\API\External\Health\Handler\HealthHandler;
|
|
||||||
|
|
||||||
return [
|
|
||||||
[
|
|
||||||
'name' => 'health',
|
|
||||||
'path' => '/api/health',
|
|
||||||
'allowed_methods' => ['GET'],
|
|
||||||
'middleware' => [
|
|
||||||
HealthHandler::class
|
|
||||||
],
|
|
||||||
],
|
|
||||||
];
|
|
||||||
|
|
||||||
?>
|
|
||||||
@ -1,12 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
use Template\API\External\Health\Handler\HealthHandler;
|
|
||||||
use Reinfi\DependencyInjection\Factory\AutoWiringFactory;
|
|
||||||
|
|
||||||
return [
|
|
||||||
'factories' => [
|
|
||||||
HealthHandler::class => AutoWiringFactory::class
|
|
||||||
],
|
|
||||||
]
|
|
||||||
|
|
||||||
?>
|
|
||||||
@ -1,16 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
declare(strict_types=1);
|
|
||||||
|
|
||||||
namespace Template\API\External\Health;
|
|
||||||
|
|
||||||
class ConfigProvider
|
|
||||||
{
|
|
||||||
public function __invoke(): array
|
|
||||||
{
|
|
||||||
return [
|
|
||||||
'dependencies' => require __DIR__ . './../config/service_manager.php',
|
|
||||||
'routes' => require __DIR__ . '/./../config/routes.php',
|
|
||||||
];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,23 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
declare(strict_types=1);
|
|
||||||
|
|
||||||
namespace Template\API\External\Health\Handler;
|
|
||||||
|
|
||||||
use Laminas\Diactoros\Response\JsonResponse;
|
|
||||||
use Psr\Http\Message\ResponseInterface;
|
|
||||||
use Psr\Http\Message\ServerRequestInterface;
|
|
||||||
use Psr\Http\Server\RequestHandlerInterface;
|
|
||||||
|
|
||||||
class HealthHandler implements RequestHandlerInterface
|
|
||||||
{
|
|
||||||
public function __construct() {
|
|
||||||
}
|
|
||||||
|
|
||||||
public function handle(ServerRequestInterface $request): ResponseInterface
|
|
||||||
{
|
|
||||||
return new JsonResponse("I'm fine. :)");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
?>
|
|
||||||
43
src/ApiDomain/External/User/config/routes.php
vendored
43
src/ApiDomain/External/User/config/routes.php
vendored
@ -1,21 +1,28 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
use Template\API\External\User\Handler\ChangePasswordHandler;
|
declare(strict_types=1);
|
||||||
use Template\API\External\User\Handler\ChangeUsernameHandler;
|
|
||||||
use Template\API\External\User\Handler\CreateUserHandler;
|
namespace Template\API\External\User;
|
||||||
use Template\API\External\User\Handler\UserStateHandler;
|
|
||||||
use Template\Infrastructure\Rbac\Middleware\EnsureAuthorizationMiddleware;
|
use Template\Infrastructure\Rbac\Middleware\EnsureAuthorizationMiddleware;
|
||||||
|
use Template\Infrastructure\Schema\Middleware\SchemaValidationMiddleware;
|
||||||
use Template\Infrastructure\Session\Middleware\LoggedInUserMiddleware;
|
use Template\Infrastructure\Session\Middleware\LoggedInUserMiddleware;
|
||||||
|
use Template\API\External\User\Create\CreateRequestHandler;
|
||||||
|
use Template\API\External\User\ChangePassword\ChangePasswordRequestHandler;
|
||||||
|
use Template\API\External\User\ChangeUsername\ChangeUsernameRequestHandler;
|
||||||
|
use Template\API\External\User\ReadList\ReadListRequestHandler;
|
||||||
|
use Template\API\External\User\State\StateRequestHandler;
|
||||||
|
|
||||||
return [
|
return [
|
||||||
[
|
[
|
||||||
'name' => 'user.create-user',
|
'name' => 'user.create',
|
||||||
'path' => '/api/user/create-user',
|
'path' => '/api/user/create',
|
||||||
'allowed_methods' => ['POST'],
|
'allowed_methods' => ['POST'],
|
||||||
'middleware' => [
|
'middleware' => [
|
||||||
|
SchemaValidationMiddleware::class,
|
||||||
LoggedInUserMiddleware::class,
|
LoggedInUserMiddleware::class,
|
||||||
EnsureAuthorizationMiddleware::class,
|
EnsureAuthorizationMiddleware::class,
|
||||||
CreateUserHandler::class
|
CreateRequestHandler::class,
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
@ -23,8 +30,10 @@ return [
|
|||||||
'path' => '/api/user/change-password',
|
'path' => '/api/user/change-password',
|
||||||
'allowed_methods' => ['POST'],
|
'allowed_methods' => ['POST'],
|
||||||
'middleware' => [
|
'middleware' => [
|
||||||
|
SchemaValidationMiddleware::class,
|
||||||
LoggedInUserMiddleware::class,
|
LoggedInUserMiddleware::class,
|
||||||
ChangePasswordHandler::class
|
EnsureAuthorizationMiddleware::class,
|
||||||
|
ChangePasswordRequestHandler::class,
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
@ -32,8 +41,21 @@ return [
|
|||||||
'path' => '/api/user/change-username',
|
'path' => '/api/user/change-username',
|
||||||
'allowed_methods' => ['POST'],
|
'allowed_methods' => ['POST'],
|
||||||
'middleware' => [
|
'middleware' => [
|
||||||
|
SchemaValidationMiddleware::class,
|
||||||
LoggedInUserMiddleware::class,
|
LoggedInUserMiddleware::class,
|
||||||
ChangeUsernameHandler::class
|
EnsureAuthorizationMiddleware::class,
|
||||||
|
ChangeUsernameRequestHandler::class,
|
||||||
|
],
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'name' => 'user.read-list',
|
||||||
|
'path' => '/api/user/read-list',
|
||||||
|
'allowed_methods' => ['POST'],
|
||||||
|
'middleware' => [
|
||||||
|
SchemaValidationMiddleware::class,
|
||||||
|
LoggedInUserMiddleware::class,
|
||||||
|
EnsureAuthorizationMiddleware::class,
|
||||||
|
ReadListRequestHandler::class,
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
@ -41,8 +63,9 @@ return [
|
|||||||
'path' => '/api/user/state',
|
'path' => '/api/user/state',
|
||||||
'allowed_methods' => ['GET'],
|
'allowed_methods' => ['GET'],
|
||||||
'middleware' => [
|
'middleware' => [
|
||||||
|
SchemaValidationMiddleware::class,
|
||||||
LoggedInUserMiddleware::class,
|
LoggedInUserMiddleware::class,
|
||||||
UserStateHandler::class
|
StateRequestHandler::class,
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
];
|
];
|
||||||
|
|||||||
@ -1,21 +1,34 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
use Template\API\External\User\Formatter\UserFormatter;
|
|
||||||
use Template\API\External\User\Handler\ChangePasswordHandler;
|
|
||||||
use Template\API\External\User\Handler\ChangeUsernameHandler;
|
|
||||||
use Template\API\External\User\Handler\CreateUserHandler;
|
|
||||||
use Template\API\External\User\Handler\UserStateHandler;
|
|
||||||
use Reinfi\DependencyInjection\Factory\AutoWiringFactory;
|
use Reinfi\DependencyInjection\Factory\AutoWiringFactory;
|
||||||
|
use Reinfi\DependencyInjection\Factory\InjectionFactory;
|
||||||
|
use Template\API\External\User\Create\CreateResponseFormatter;
|
||||||
|
use Template\API\External\User\Create\CreateRequestHandler;
|
||||||
|
use Template\API\External\User\ChangePassword\ChangePasswordResponseFormatter;
|
||||||
|
use Template\API\External\User\ChangePassword\ChangePasswordRequestHandler;
|
||||||
|
use Template\API\External\User\ChangeUsername\ChangeUsernameResponseFormatter;
|
||||||
|
use Template\API\External\User\ChangeUsername\ChangeUsernameRequestHandler;
|
||||||
|
use Template\API\External\User\ReadList\ReadListResponseFormatter;
|
||||||
|
use Template\API\External\User\ReadList\ReadListRequestHandler;
|
||||||
|
use Template\API\External\User\State\StateResponseFormatter;
|
||||||
|
use Template\API\External\User\State\StateRequestHandler;
|
||||||
|
|
||||||
return [
|
return [
|
||||||
'factories' => [
|
'factories' => [
|
||||||
// Formatter
|
/// Create
|
||||||
UserFormatter::class => AutoWiringFactory::class,
|
CreateResponseFormatter::class => AutoWiringFactory::class,
|
||||||
|
CreateRequestHandler::class => AutoWiringFactory::class,
|
||||||
// Handler
|
/// ChangePassword
|
||||||
CreateUserHandler::class => AutoWiringFactory::class,
|
ChangePasswordResponseFormatter::class => AutoWiringFactory::class,
|
||||||
UserStateHandler::class => AutoWiringFactory::class,
|
ChangePasswordRequestHandler::class => AutoWiringFactory::class,
|
||||||
ChangePasswordHandler::class => AutoWiringFactory::class,
|
/// ChangeUsername
|
||||||
ChangeUsernameHandler::class => AutoWiringFactory::class,
|
ChangeUsernameResponseFormatter::class => AutoWiringFactory::class,
|
||||||
|
ChangeUsernameRequestHandler::class => AutoWiringFactory::class,
|
||||||
|
/// ReadList
|
||||||
|
ReadListResponseFormatter::class => AutoWiringFactory::class,
|
||||||
|
ReadListRequestHandler::class => AutoWiringFactory::class,
|
||||||
|
/// State
|
||||||
|
StateResponseFormatter::class => AutoWiringFactory::class,
|
||||||
|
StateRequestHandler::class => AutoWiringFactory::class,
|
||||||
],
|
],
|
||||||
];
|
];
|
||||||
|
|||||||
43
src/ApiDomain/External/User/src/ChangePassword/ChangePasswordRequestHandler.php
vendored
Normal file
43
src/ApiDomain/External/User/src/ChangePassword/ChangePasswordRequestHandler.php
vendored
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Template\API\External\User\ChangePassword;
|
||||||
|
|
||||||
|
use Psr\Http\Message\ResponseInterface;
|
||||||
|
use Psr\Http\Message\ServerRequestInterface;
|
||||||
|
use Psr\Http\Server\RequestHandlerInterface;
|
||||||
|
use Template\Data\Business\Entity\User;
|
||||||
|
use Template\Infrastructure\Response\SuccessResponse;
|
||||||
|
use Template\Infrastructure\Request\Middleware\AnalyzeBodyMiddleware;
|
||||||
|
use Template\Handling\User\UseCase\ChangePassword\ChangePasswordUseCaseHandler;
|
||||||
|
use Template\Handling\User\UseCase\ChangePassword\ChangePasswordUseCaseBuilder;
|
||||||
|
use Template\API\External\User\ChangePassword\ChangePasswordResponseFormatter;
|
||||||
|
use Template\Infrastructure\Session\Middleware\LoggedInUserMiddleware;
|
||||||
|
|
||||||
|
class ChangePasswordRequestHandler implements RequestHandlerInterface
|
||||||
|
{
|
||||||
|
public function __construct(
|
||||||
|
private readonly ChangePasswordUseCaseBuilder $builder,
|
||||||
|
private readonly ChangePasswordUseCaseHandler $handler,
|
||||||
|
private readonly ChangePasswordResponseFormatter $responseFormatter,
|
||||||
|
) {
|
||||||
|
}
|
||||||
|
|
||||||
|
public function handle(ServerRequestInterface $request): ResponseInterface
|
||||||
|
{
|
||||||
|
/** @var User $user */
|
||||||
|
$user = $request->getAttribute(LoggedInUserMiddleware::USER_KEY);
|
||||||
|
$data = $request->getAttribute(AnalyzeBodyMiddleware::JSON_DATA);
|
||||||
|
|
||||||
|
$useCase = $this->builder->build(
|
||||||
|
$user,
|
||||||
|
$data['password'],
|
||||||
|
$data['newPassword'],
|
||||||
|
);
|
||||||
|
$result = $this->handler->handle($useCase);
|
||||||
|
|
||||||
|
$response = $this->responseFormatter->format($result);
|
||||||
|
return new SuccessResponse($response);
|
||||||
|
}
|
||||||
|
}
|
||||||
16
src/ApiDomain/External/User/src/ChangePassword/ChangePasswordResponseFormatter.php
vendored
Normal file
16
src/ApiDomain/External/User/src/ChangePassword/ChangePasswordResponseFormatter.php
vendored
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Template\API\External\User\ChangePassword;
|
||||||
|
|
||||||
|
use Template\Handling\User\UseCase\ChangePassword\ChangePasswordUseCaseResult;
|
||||||
|
|
||||||
|
class ChangePasswordResponseFormatter
|
||||||
|
{
|
||||||
|
public function format(ChangePasswordUseCaseResult $result): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
43
src/ApiDomain/External/User/src/ChangeUsername/ChangeUsernameRequestHandler.php
vendored
Normal file
43
src/ApiDomain/External/User/src/ChangeUsername/ChangeUsernameRequestHandler.php
vendored
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Template\API\External\User\ChangeUsername;
|
||||||
|
|
||||||
|
use Psr\Http\Message\ResponseInterface;
|
||||||
|
use Psr\Http\Message\ServerRequestInterface;
|
||||||
|
use Psr\Http\Server\RequestHandlerInterface;
|
||||||
|
use Template\Data\Business\Entity\User;
|
||||||
|
use Template\Infrastructure\Response\SuccessResponse;
|
||||||
|
use Template\Infrastructure\Request\Middleware\AnalyzeBodyMiddleware;
|
||||||
|
use Template\Handling\User\UseCase\ChangeUsername\ChangeUsernameUseCaseHandler;
|
||||||
|
use Template\Handling\User\UseCase\ChangeUsername\ChangeUsernameUseCaseBuilder;
|
||||||
|
use Template\API\External\User\ChangeUsername\ChangeUsernameResponseFormatter;
|
||||||
|
use Template\Infrastructure\Session\Middleware\LoggedInUserMiddleware;
|
||||||
|
|
||||||
|
class ChangeUsernameRequestHandler implements RequestHandlerInterface
|
||||||
|
{
|
||||||
|
public function __construct(
|
||||||
|
private readonly ChangeUsernameUseCaseBuilder $builder,
|
||||||
|
private readonly ChangeUsernameUseCaseHandler $handler,
|
||||||
|
private readonly ChangeUsernameResponseFormatter $responseFormatter,
|
||||||
|
) {
|
||||||
|
}
|
||||||
|
|
||||||
|
public function handle(ServerRequestInterface $request): ResponseInterface
|
||||||
|
{
|
||||||
|
/** @var User $user */
|
||||||
|
$user = $request->getAttribute(LoggedInUserMiddleware::USER_KEY);
|
||||||
|
$data = $request->getAttribute(AnalyzeBodyMiddleware::JSON_DATA);
|
||||||
|
|
||||||
|
$useCase = $this->builder->build(
|
||||||
|
$user,
|
||||||
|
$data['password'],
|
||||||
|
$data['newUsername'],
|
||||||
|
);
|
||||||
|
$result = $this->handler->handle($useCase);
|
||||||
|
|
||||||
|
$response = $this->responseFormatter->format($result);
|
||||||
|
return new SuccessResponse($response);
|
||||||
|
}
|
||||||
|
}
|
||||||
16
src/ApiDomain/External/User/src/ChangeUsername/ChangeUsernameResponseFormatter.php
vendored
Normal file
16
src/ApiDomain/External/User/src/ChangeUsername/ChangeUsernameResponseFormatter.php
vendored
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Template\API\External\User\ChangeUsername;
|
||||||
|
|
||||||
|
use Template\Handling\User\UseCase\ChangeUsername\ChangeUsernameUseCaseResult;
|
||||||
|
|
||||||
|
class ChangeUsernameResponseFormatter
|
||||||
|
{
|
||||||
|
public function format(ChangeUsernameUseCaseResult $result): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
39
src/ApiDomain/External/User/src/Create/CreateRequestHandler.php
vendored
Normal file
39
src/ApiDomain/External/User/src/Create/CreateRequestHandler.php
vendored
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Template\API\External\User\Create;
|
||||||
|
|
||||||
|
use Psr\Http\Message\ResponseInterface;
|
||||||
|
use Psr\Http\Message\ServerRequestInterface;
|
||||||
|
use Psr\Http\Server\RequestHandlerInterface;
|
||||||
|
use Template\Infrastructure\Response\SuccessResponse;
|
||||||
|
use Template\Infrastructure\Request\Middleware\AnalyzeBodyMiddleware;
|
||||||
|
use Template\Handling\User\UseCase\Create\CreateUseCaseHandler;
|
||||||
|
use Template\Handling\User\UseCase\Create\CreateUseCaseBuilder;
|
||||||
|
use Template\API\External\User\Create\CreateResponseFormatter;
|
||||||
|
|
||||||
|
class CreateRequestHandler implements RequestHandlerInterface
|
||||||
|
{
|
||||||
|
public function __construct(
|
||||||
|
private readonly CreateUseCaseBuilder $builder,
|
||||||
|
private readonly CreateUseCaseHandler $handler,
|
||||||
|
private readonly CreateResponseFormatter $responseFormatter,
|
||||||
|
) {
|
||||||
|
}
|
||||||
|
|
||||||
|
public function handle(ServerRequestInterface $request): ResponseInterface
|
||||||
|
{
|
||||||
|
$data = $request->getAttribute(AnalyzeBodyMiddleware::JSON_DATA);
|
||||||
|
|
||||||
|
$useCase = $this->builder->build(
|
||||||
|
$data['username'],
|
||||||
|
$data['mail'],
|
||||||
|
$data['password'],
|
||||||
|
);
|
||||||
|
$result = $this->handler->handle($useCase);
|
||||||
|
|
||||||
|
$response = $this->responseFormatter->format($result);
|
||||||
|
return new SuccessResponse($response);
|
||||||
|
}
|
||||||
|
}
|
||||||
30
src/ApiDomain/External/User/src/Create/CreateResponseFormatter.php
vendored
Normal file
30
src/ApiDomain/External/User/src/Create/CreateResponseFormatter.php
vendored
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Template\API\External\User\Create;
|
||||||
|
|
||||||
|
use DateTimeInterface;
|
||||||
|
use Template\Handling\User\UseCase\Create\CreateUseCaseResult;
|
||||||
|
|
||||||
|
class CreateResponseFormatter
|
||||||
|
{
|
||||||
|
public function format(CreateUseCaseResult $result): array
|
||||||
|
{
|
||||||
|
$user = $result->getUser();
|
||||||
|
|
||||||
|
$permissions = [];
|
||||||
|
foreach ($user->getRole()->getPermissions()->toArray() as $permission) {
|
||||||
|
$permissions[] = $permission->getIdentifier();
|
||||||
|
}
|
||||||
|
|
||||||
|
return [
|
||||||
|
'id' => $user->getId()->toString(),
|
||||||
|
'username' => $user->getUsername(),
|
||||||
|
'role' => $user->getRole()->getIdentifier(),
|
||||||
|
'permissions' => $permissions,
|
||||||
|
'created' => $user->getCreatedAt()->format(DateTimeInterface::RFC3339),
|
||||||
|
'updated' => $user->getUpdatedAt()->format(DateTimeInterface::RFC3339)
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,27 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace Template\API\External\User\Formatter;
|
|
||||||
|
|
||||||
use DateTime;
|
|
||||||
use Template\Data\Business\Entity\User;
|
|
||||||
|
|
||||||
class UserFormatter {
|
|
||||||
|
|
||||||
public function format(User $user): array {
|
|
||||||
$userArray = [
|
|
||||||
'id' => $user->getId()->toString(),
|
|
||||||
'username' => $user->getUsername(),
|
|
||||||
'role' => $user->getRole()->getIdentifier(),
|
|
||||||
'created' => $user->getCreatedAt()->format(DateTime::ATOM),
|
|
||||||
'updated' => $user->getUpdatedAt()->format(DateTime::ATOM)
|
|
||||||
];
|
|
||||||
|
|
||||||
$userArray['permissions'] = [];
|
|
||||||
|
|
||||||
foreach ($user->getRole()->getPermissions()->toArray() as $permission) {
|
|
||||||
$userArray['permissions'][] = $permission->getIdentifier();
|
|
||||||
}
|
|
||||||
|
|
||||||
return $userArray;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,43 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
declare(strict_types=1);
|
|
||||||
|
|
||||||
namespace Template\API\External\User\Handler;
|
|
||||||
|
|
||||||
use Template\Data\Business\Entity\User;
|
|
||||||
use Template\Handling\User\Handler\Command\ChangePassword\ChangePasswordCommandBuilder;
|
|
||||||
use Template\Handling\User\Handler\Command\ChangePassword\ChangePasswordCommandHandler;
|
|
||||||
use Template\Infrastructure\Response\SuccessResponse;
|
|
||||||
use Template\Infrastructure\Session\Middleware\LoggedInUserMiddleware;
|
|
||||||
use Psr\Http\Message\ResponseInterface;
|
|
||||||
use Psr\Http\Message\ServerRequestInterface;
|
|
||||||
use Psr\Http\Server\RequestHandlerInterface;
|
|
||||||
|
|
||||||
class ChangePasswordHandler implements RequestHandlerInterface
|
|
||||||
{
|
|
||||||
public function __construct(
|
|
||||||
private readonly ChangePasswordCommandHandler $handler,
|
|
||||||
private readonly ChangePasswordCommandBuilder $builder,
|
|
||||||
) {
|
|
||||||
}
|
|
||||||
|
|
||||||
public function handle(ServerRequestInterface $request): ResponseInterface
|
|
||||||
{
|
|
||||||
/** @var User $user */
|
|
||||||
$user = $request->getAttribute(LoggedInUserMiddleware::USER_KEY);
|
|
||||||
|
|
||||||
$data = json_decode(
|
|
||||||
$request->getBody()->getContents(),
|
|
||||||
true
|
|
||||||
);
|
|
||||||
|
|
||||||
$query = $this->builder->build(
|
|
||||||
$user,
|
|
||||||
$data['password'],
|
|
||||||
$data['newPassword'],
|
|
||||||
);
|
|
||||||
$this->handler->execute($query);
|
|
||||||
|
|
||||||
return new SuccessResponse();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,43 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
declare(strict_types=1);
|
|
||||||
|
|
||||||
namespace Template\API\External\User\Handler;
|
|
||||||
|
|
||||||
use Template\Data\Business\Entity\User;
|
|
||||||
use Template\Handling\User\Handler\Command\ChangeUsername\ChangeUsernameCommandBuilder;
|
|
||||||
use Template\Handling\User\Handler\Command\ChangeUsername\ChangeUsernameCommandHandler;
|
|
||||||
use Template\Infrastructure\Response\SuccessResponse;
|
|
||||||
use Template\Infrastructure\Session\Middleware\LoggedInUserMiddleware;
|
|
||||||
use Psr\Http\Message\ResponseInterface;
|
|
||||||
use Psr\Http\Message\ServerRequestInterface;
|
|
||||||
use Psr\Http\Server\RequestHandlerInterface;
|
|
||||||
|
|
||||||
class ChangeUsernameHandler implements RequestHandlerInterface
|
|
||||||
{
|
|
||||||
public function __construct(
|
|
||||||
private readonly ChangeUsernameCommandHandler $handler,
|
|
||||||
private readonly ChangeUsernameCommandBuilder $builder,
|
|
||||||
) {
|
|
||||||
}
|
|
||||||
|
|
||||||
public function handle(ServerRequestInterface $request): ResponseInterface
|
|
||||||
{
|
|
||||||
/** @var User $user */
|
|
||||||
$user = $request->getAttribute(LoggedInUserMiddleware::USER_KEY);
|
|
||||||
|
|
||||||
$data = json_decode(
|
|
||||||
$request->getBody()->getContents(),
|
|
||||||
true
|
|
||||||
);
|
|
||||||
|
|
||||||
$query = $this->builder->build(
|
|
||||||
$user,
|
|
||||||
$data['password'],
|
|
||||||
$data['newUsername'],
|
|
||||||
);
|
|
||||||
$this->handler->execute($query);
|
|
||||||
|
|
||||||
return new SuccessResponse();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,44 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
declare(strict_types=1);
|
|
||||||
|
|
||||||
namespace Template\API\External\User\Handler;
|
|
||||||
|
|
||||||
use Template\API\External\User\Formatter\UserFormatter;
|
|
||||||
use Template\Handling\User\Handler\Command\CreateUser\CreateUserCommandBuilder;
|
|
||||||
use Template\Handling\User\Handler\Command\CreateUser\CreateUserCommandHandler;
|
|
||||||
use Laminas\Diactoros\Response\JsonResponse;
|
|
||||||
use Psr\Http\Message\ResponseInterface;
|
|
||||||
use Psr\Http\Message\ServerRequestInterface;
|
|
||||||
use Psr\Http\Server\RequestHandlerInterface;
|
|
||||||
|
|
||||||
class CreateUserHandler implements RequestHandlerInterface
|
|
||||||
{
|
|
||||||
public function __construct(
|
|
||||||
private readonly CreateUserCommandHandler $handler,
|
|
||||||
private readonly CreateUserCommandBuilder $builder,
|
|
||||||
private readonly UserFormatter $userFormatter,
|
|
||||||
) {
|
|
||||||
}
|
|
||||||
|
|
||||||
public function handle(ServerRequestInterface $request): ResponseInterface
|
|
||||||
{
|
|
||||||
$data = json_decode(
|
|
||||||
$request->getBody()->getContents(),
|
|
||||||
true
|
|
||||||
);
|
|
||||||
|
|
||||||
$query = $this->builder->build(
|
|
||||||
$data['username'],
|
|
||||||
$data['mail'],
|
|
||||||
$data['password'],
|
|
||||||
);
|
|
||||||
$result = $this->handler->execute($query);
|
|
||||||
|
|
||||||
return new JsonResponse(
|
|
||||||
$this->userFormatter->format($result)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
?>
|
|
||||||
@ -1,34 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
declare(strict_types=1);
|
|
||||||
|
|
||||||
namespace Template\API\External\User\Handler;
|
|
||||||
|
|
||||||
use Template\API\External\User\Formatter\UserFormatter;
|
|
||||||
use Template\Data\Business\Entity\User;
|
|
||||||
use Template\Handling\User\Handler\Command\CreateUser\CreateUserCommandBuilder;
|
|
||||||
use Template\Handling\User\Handler\Command\CreateUser\ChangePasswordCommandHandler;
|
|
||||||
use Template\Infrastructure\Session\Middleware\LoggedInUserMiddleware;
|
|
||||||
use Laminas\Diactoros\Response\JsonResponse;
|
|
||||||
use Psr\Http\Message\ResponseInterface;
|
|
||||||
use Psr\Http\Message\ServerRequestInterface;
|
|
||||||
use Psr\Http\Server\RequestHandlerInterface;
|
|
||||||
|
|
||||||
class UserStateHandler implements RequestHandlerInterface
|
|
||||||
{
|
|
||||||
public function __construct(
|
|
||||||
private readonly UserFormatter $userFormatter,
|
|
||||||
) {
|
|
||||||
}
|
|
||||||
|
|
||||||
public function handle(ServerRequestInterface $request): ResponseInterface
|
|
||||||
{
|
|
||||||
/** @var User $user */
|
|
||||||
$user = $request->getAttribute(LoggedInUserMiddleware::USER_KEY);
|
|
||||||
|
|
||||||
$response = $this->userFormatter->format($user);
|
|
||||||
$response['sessionId'] = $user->getSession()->getId()->toString();
|
|
||||||
|
|
||||||
return new JsonResponse($response);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
39
src/ApiDomain/External/User/src/ReadList/ReadListRequestHandler.php
vendored
Normal file
39
src/ApiDomain/External/User/src/ReadList/ReadListRequestHandler.php
vendored
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Template\API\External\User\ReadList;
|
||||||
|
|
||||||
|
use Psr\Http\Message\ResponseInterface;
|
||||||
|
use Psr\Http\Message\ServerRequestInterface;
|
||||||
|
use Psr\Http\Server\RequestHandlerInterface;
|
||||||
|
use Template\Infrastructure\Response\SuccessResponse;
|
||||||
|
use Template\Infrastructure\Request\Middleware\AnalyzeBodyMiddleware;
|
||||||
|
use Template\Handling\User\UseCase\ReadList\ReadListUseCaseHandler;
|
||||||
|
use Template\Handling\User\UseCase\ReadList\ReadListUseCaseBuilder;
|
||||||
|
use Template\API\External\User\ReadList\ReadListResponseFormatter;
|
||||||
|
|
||||||
|
class ReadListRequestHandler implements RequestHandlerInterface
|
||||||
|
{
|
||||||
|
public function __construct(
|
||||||
|
private readonly ReadListUseCaseBuilder $builder,
|
||||||
|
private readonly ReadListUseCaseHandler $handler,
|
||||||
|
private readonly ReadListResponseFormatter $responseFormatter,
|
||||||
|
) {
|
||||||
|
}
|
||||||
|
|
||||||
|
public function handle(ServerRequestInterface $request): ResponseInterface
|
||||||
|
{
|
||||||
|
$data = $request->getAttribute(AnalyzeBodyMiddleware::JSON_DATA);
|
||||||
|
|
||||||
|
$useCase = $this->builder->build(
|
||||||
|
$data['page'],
|
||||||
|
$data['perPage'],
|
||||||
|
$data['query'],
|
||||||
|
);
|
||||||
|
$result = $this->handler->handle($useCase);
|
||||||
|
|
||||||
|
$response = $this->responseFormatter->format($result);
|
||||||
|
return new SuccessResponse($response);
|
||||||
|
}
|
||||||
|
}
|
||||||
18
src/ApiDomain/External/User/src/ReadList/ReadListResponseFormatter.php
vendored
Normal file
18
src/ApiDomain/External/User/src/ReadList/ReadListResponseFormatter.php
vendored
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Template\API\External\User\ReadList;
|
||||||
|
|
||||||
|
use Template\Handling\User\UseCase\ReadList\ReadListUseCaseResult;
|
||||||
|
|
||||||
|
class ReadListResponseFormatter
|
||||||
|
{
|
||||||
|
public function format(ReadListUseCaseResult $result): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'total' => ,
|
||||||
|
'items' => ,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
29
src/ApiDomain/External/User/src/State/StateRequestHandler.php
vendored
Normal file
29
src/ApiDomain/External/User/src/State/StateRequestHandler.php
vendored
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Template\API\External\User\State;
|
||||||
|
|
||||||
|
use Psr\Http\Message\ResponseInterface;
|
||||||
|
use Psr\Http\Message\ServerRequestInterface;
|
||||||
|
use Psr\Http\Server\RequestHandlerInterface;
|
||||||
|
use Template\Data\Business\Entity\User;
|
||||||
|
use Template\Infrastructure\Response\SuccessResponse;
|
||||||
|
use Template\Infrastructure\Session\Middleware\LoggedInUserMiddleware;
|
||||||
|
|
||||||
|
class StateRequestHandler implements RequestHandlerInterface
|
||||||
|
{
|
||||||
|
public function __construct(
|
||||||
|
private readonly StateResponseFormatter $responseFormatter,
|
||||||
|
) {
|
||||||
|
}
|
||||||
|
|
||||||
|
public function handle(ServerRequestInterface $request): ResponseInterface
|
||||||
|
{
|
||||||
|
/** @var User $user */
|
||||||
|
$user = $request->getAttribute(LoggedInUserMiddleware::USER_KEY);
|
||||||
|
|
||||||
|
$response = $this->responseFormatter->format($user);
|
||||||
|
return new SuccessResponse($response);
|
||||||
|
}
|
||||||
|
}
|
||||||
29
src/ApiDomain/External/User/src/State/StateResponseFormatter.php
vendored
Normal file
29
src/ApiDomain/External/User/src/State/StateResponseFormatter.php
vendored
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Template\API\External\User\State;
|
||||||
|
|
||||||
|
use DateTimeInterface;
|
||||||
|
use Template\Data\Business\Entity\User;
|
||||||
|
|
||||||
|
class StateResponseFormatter
|
||||||
|
{
|
||||||
|
public function format(User $user): array
|
||||||
|
{
|
||||||
|
$permissions = [];
|
||||||
|
foreach ($user->getRole()->getPermissions()->toArray() as $permission) {
|
||||||
|
$permissions[] = $permission->getIdentifier();
|
||||||
|
}
|
||||||
|
|
||||||
|
return [
|
||||||
|
'id' => $user->getId(),
|
||||||
|
'sessionId' => $user->getSession()->getId(),
|
||||||
|
'username' => $user->getUsername(),
|
||||||
|
'roleIdentifier' => $user->getRole()->getIdentifier(),
|
||||||
|
'permissions' => $permissions,
|
||||||
|
'createdAt' => $user->getCreatedAt()->format(DateTimeInterface::RFC3339),
|
||||||
|
'updatedAt' => $user->getUpdatedAt()->format(DateTimeInterface::RFC3339),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -20,7 +20,7 @@
|
|||||||
"username": {
|
"username": {
|
||||||
"$ref": "../../Authentication/Partials/username.json"
|
"$ref": "../../Authentication/Partials/username.json"
|
||||||
},
|
},
|
||||||
"role": {
|
"roleIdentifier": {
|
||||||
"$ref": "../../Authentication/Partials/role-identifier.json"
|
"$ref": "../../Authentication/Partials/role-identifier.json"
|
||||||
},
|
},
|
||||||
"permissions": {
|
"permissions": {
|
||||||
|
|||||||
41
src/HandlingDomain/Authentication/config/service_manager.php
Normal file
41
src/HandlingDomain/Authentication/config/service_manager.php
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Template\Handling\Auth;
|
||||||
|
|
||||||
|
use Reinfi\DependencyInjection\Factory\AutoWiringFactory;
|
||||||
|
use Reinfi\DependencyInjection\Factory\InjectionFactory;
|
||||||
|
use Template\Handling\Authentication\Builder\UserSessionBuilder;
|
||||||
|
use Template\Handling\Authentication\Rule\UserPasswordMatchesRule;
|
||||||
|
use Template\Handling\Authentication\UseCase\LoginUser\LoginUserUseCaseHandler;
|
||||||
|
use Template\Handling\Authentication\UseCase\LoginUser\LoginUserUseCaseBuilder;
|
||||||
|
use Template\Handling\Authentication\UseCase\LogoutUser\LogoutUserUseCaseHandler;
|
||||||
|
use Template\Handling\Authentication\UseCase\LogoutUser\LogoutUserUseCaseBuilder;
|
||||||
|
use Template\Handling\Authentication\UseCase\ForgotPassword\ForgotPasswordUseCaseHandler;
|
||||||
|
use Template\Handling\Authentication\UseCase\ForgotPassword\ForgotPasswordUseCaseBuilder;
|
||||||
|
use Template\Handling\Authentication\UseCase\ResetPassword\ResetPasswordUseCaseHandler;
|
||||||
|
use Template\Handling\Authentication\UseCase\ResetPassword\ResetPasswordUseCaseBuilder;
|
||||||
|
|
||||||
|
return [
|
||||||
|
'factories' => [
|
||||||
|
/// Builder
|
||||||
|
UserSessionBuilder::class => AutoWiringFactory::class,
|
||||||
|
|
||||||
|
/// Rule
|
||||||
|
UserPasswordMatchesRule::class => AutoWiringFactory::class,
|
||||||
|
|
||||||
|
/// LoginUser
|
||||||
|
LoginUserUseCaseHandler::class => InjectionFactory::class,
|
||||||
|
LoginUserUseCaseBuilder::class => AutoWiringFactory::class,
|
||||||
|
/// LogoutUser
|
||||||
|
LogoutUserUseCaseHandler::class => AutoWiringFactory::class,
|
||||||
|
LogoutUserUseCaseBuilder::class => AutoWiringFactory::class,
|
||||||
|
/// ForgotPassword
|
||||||
|
ForgotPasswordUseCaseHandler::class => AutoWiringFactory::class,
|
||||||
|
ForgotPasswordUseCaseBuilder::class => AutoWiringFactory::class,
|
||||||
|
/// ResetPassword
|
||||||
|
ResetPasswordUseCaseHandler::class => AutoWiringFactory::class,
|
||||||
|
ResetPasswordUseCaseBuilder::class => AutoWiringFactory::class,
|
||||||
|
]
|
||||||
|
];
|
||||||
@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace Template\Handling\UserSession\Builder;
|
namespace Template\Handling\Authentication\Builder;
|
||||||
|
|
||||||
use Template\Data\Business\Entity\UserSession;
|
use Template\Data\Business\Entity\UserSession;
|
||||||
|
|
||||||
15
src/HandlingDomain/Authentication/src/ConfigProvider.php
Normal file
15
src/HandlingDomain/Authentication/src/ConfigProvider.php
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Template\Handling\Authentication;
|
||||||
|
|
||||||
|
class ConfigProvider
|
||||||
|
{
|
||||||
|
public function __invoke(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'dependencies' => require __DIR__ . '/./../config/service_manager.php',
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace Template\Handling\UserSession\Rule;
|
namespace Template\Handling\Authentication\Rule;
|
||||||
|
|
||||||
use Template\Data\Business\Entity\User;
|
use Template\Data\Business\Entity\User;
|
||||||
use Template\Infrastructure\Encryption\Client\EncryptionClient;
|
use Template\Infrastructure\Encryption\Client\EncryptionClient;
|
||||||
@ -0,0 +1,18 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Template\Handling\Authentication\UseCase\ForgotPassword;
|
||||||
|
|
||||||
|
class ForgotPasswordUseCase
|
||||||
|
{
|
||||||
|
public function __construct(
|
||||||
|
private readonly string $mail,
|
||||||
|
) {
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getMail(): string
|
||||||
|
{
|
||||||
|
return $this->mail;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,16 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Template\Handling\Authentication\UseCase\ForgotPassword;
|
||||||
|
|
||||||
|
class ForgotPasswordUseCaseBuilder
|
||||||
|
{
|
||||||
|
public function build(
|
||||||
|
string $mail,
|
||||||
|
): ForgotPasswordUseCase {
|
||||||
|
return new ForgotPasswordUseCase(
|
||||||
|
$mail,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,17 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Template\Handling\Authentication\UseCase\ForgotPassword;
|
||||||
|
|
||||||
|
class ForgotPasswordUseCaseHandler
|
||||||
|
{
|
||||||
|
public function __construct(
|
||||||
|
) {
|
||||||
|
}
|
||||||
|
|
||||||
|
public function handle(ForgotPasswordUseCase $useCase): ForgotPasswordUseCaseResult
|
||||||
|
{
|
||||||
|
return new ForgotPasswordUseCaseResult();
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,12 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Template\Handling\Authentication\UseCase\ForgotPassword;
|
||||||
|
|
||||||
|
class ForgotPasswordUseCaseResult
|
||||||
|
{
|
||||||
|
public function __construct(
|
||||||
|
) {
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,32 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Template\Handling\Authentication\UseCase\LoginUser;
|
||||||
|
|
||||||
|
use Template\Data\Business\Entity\UserSession;
|
||||||
|
|
||||||
|
class LoginUserUseCase
|
||||||
|
{
|
||||||
|
public function __construct(
|
||||||
|
private readonly UserSession $session,
|
||||||
|
private readonly string $identifier,
|
||||||
|
private readonly string $password,
|
||||||
|
) {
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getSession(): UserSession
|
||||||
|
{
|
||||||
|
return $this->session;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getIdentifier(): string
|
||||||
|
{
|
||||||
|
return $this->identifier;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getPassword(): string
|
||||||
|
{
|
||||||
|
return $this->password;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,22 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Template\Handling\Authentication\UseCase\LoginUser;
|
||||||
|
|
||||||
|
use Template\Data\Business\Entity\UserSession;
|
||||||
|
|
||||||
|
class LoginUserUseCaseBuilder
|
||||||
|
{
|
||||||
|
public function build(
|
||||||
|
UserSession $session,
|
||||||
|
string $identifier,
|
||||||
|
string $password,
|
||||||
|
): LoginUserUseCase {
|
||||||
|
return new LoginUserUseCase(
|
||||||
|
$session,
|
||||||
|
$identifier,
|
||||||
|
$password,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,19 +1,20 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace Template\Handling\UserSession\Handler\Command\LoginUser;
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Template\Handling\Authentication\UseCase\LoginUser;
|
||||||
|
|
||||||
use DateTime;
|
use DateTime;
|
||||||
use Template\Data\Business\Entity\UserSession;
|
use Template\Data\Business\Manager\EntityManager;
|
||||||
use Template\Data\Business\Repository\UserRepository;
|
use Template\Data\Business\Repository\UserRepository;
|
||||||
use Template\Data\Business\Repository\UserSessionRepository;
|
use Template\Data\Business\Repository\UserSessionRepository;
|
||||||
use Template\Handling\User\Exception\UserNotFoundByIdentifierException;
|
use Template\Handling\User\Exception\UserNotFoundByIdentifierException;
|
||||||
use Template\Handling\User\Exception\UserWrongPasswordException;
|
use Template\Handling\User\Exception\UserWrongPasswordException;
|
||||||
use Template\Handling\UserSession\Rule\UserPasswordMatchesRule;
|
|
||||||
use Template\Data\Business\Manager\EntityManager;
|
|
||||||
use Reinfi\DependencyInjection\Annotation\Inject;
|
use Reinfi\DependencyInjection\Annotation\Inject;
|
||||||
use Reinfi\DependencyInjection\Annotation\InjectDoctrineRepository;
|
use Reinfi\DependencyInjection\Annotation\InjectDoctrineRepository;
|
||||||
|
use Template\Handling\Authentication\Rule\UserPasswordMatchesRule;
|
||||||
|
|
||||||
class LoginUserCommandHandler
|
class LoginUserUseCaseHandler
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* @Inject("Template\Data\Business\Manager\EntityManager")
|
* @Inject("Template\Data\Business\Manager\EntityManager")
|
||||||
@ -25,56 +26,45 @@ class LoginUserCommandHandler
|
|||||||
* entityManager="Template\Data\Business\Manager\EntityManager",
|
* entityManager="Template\Data\Business\Manager\EntityManager",
|
||||||
* entity="Template\Data\Business\Entity\UserSession"
|
* entity="Template\Data\Business\Entity\UserSession"
|
||||||
* )
|
* )
|
||||||
* @Inject("Template\Handling\UserSession\Rule\UserPasswordMatchesRule")
|
* @Inject("Template\Handling\Authentication\Rule\UserPasswordMatchesRule")
|
||||||
*/
|
*/
|
||||||
public function __construct(
|
public function __construct(
|
||||||
private readonly EntityManager $entityManager,
|
private readonly EntityManager $entityManager,
|
||||||
private readonly UserRepository $userRepository,
|
private readonly UserRepository $userRepository,
|
||||||
private readonly UserSessionRepository $userSessionRepository,
|
private readonly UserSessionRepository $userSessionRepository,
|
||||||
private readonly UserPasswordMatchesRule $passwordMatchesRule
|
private readonly UserPasswordMatchesRule $passwordMatchesRule
|
||||||
) {
|
) {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @throws UserWrongPasswordException
|
* @throws UserWrongPasswordException
|
||||||
* @throws UserNotFoundByIdentifierException
|
* @throws UserNotFoundByIdentifierException
|
||||||
*/
|
*/
|
||||||
public function execute(LoginUserCommand $command): UserSession
|
public function handle(LoginUserUseCase $useCase): LoginUserUseCaseResult
|
||||||
{
|
{
|
||||||
$user = $this->userRepository->findByIdentifier(
|
$user = $this->userRepository->findByIdentifier($useCase->getIdentifier());
|
||||||
$command->getIdentifier()
|
|
||||||
);
|
|
||||||
|
|
||||||
if ($user === null) {
|
if ($user === null) {
|
||||||
throw new UserNotFoundByIdentifierException($command->getIdentifier());
|
throw new UserNotFoundByIdentifierException($useCase->getIdentifier());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (
|
if (!$this->passwordMatchesRule->appliesTo($useCase->getPassword(), $user)) {
|
||||||
!$this->passwordMatchesRule->appliesTo(
|
|
||||||
$command->getPassword(),
|
|
||||||
$user
|
|
||||||
)
|
|
||||||
) {
|
|
||||||
throw new UserWrongPasswordException();
|
throw new UserWrongPasswordException();
|
||||||
}
|
}
|
||||||
|
|
||||||
$oldUserSessions = $this->userSessionRepository->findBy([
|
$oldUserSessions = $this->userSessionRepository->findBy(['userId' => $user->getId()]);
|
||||||
'userId' => $user->getId()
|
|
||||||
]);
|
|
||||||
|
|
||||||
foreach ($oldUserSessions as $oldUserSession) {
|
foreach ($oldUserSessions as $oldUserSession) {
|
||||||
$this->entityManager->remove($oldUserSession);
|
$this->entityManager->remove($oldUserSession);
|
||||||
}
|
}
|
||||||
|
|
||||||
$session = $command->getSession();
|
$session = $useCase->getSession();
|
||||||
$session->setUser($user);
|
$session->setUser($user);
|
||||||
$user->setLastLoginAt(new DateTime('now'));
|
$user->setLastLoginAt(new DateTime('now'));
|
||||||
|
|
||||||
$this->entityManager->persist($session);
|
$this->entityManager->persist($session);
|
||||||
$this->entityManager->flush();
|
$this->entityManager->flush();
|
||||||
|
|
||||||
return $session;
|
return new LoginUserUseCaseResult($session);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
?>
|
|
||||||
@ -0,0 +1,20 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Template\Handling\Authentication\UseCase\LoginUser;
|
||||||
|
|
||||||
|
use Template\Data\Business\Entity\UserSession;
|
||||||
|
|
||||||
|
class LoginUserUseCaseResult
|
||||||
|
{
|
||||||
|
public function __construct(
|
||||||
|
private UserSession $userSession,
|
||||||
|
) {
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getSession(): UserSession
|
||||||
|
{
|
||||||
|
return $this->userSession;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,20 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Template\Handling\Authentication\UseCase\LogoutUser;
|
||||||
|
|
||||||
|
use Template\Data\Business\Entity\UserSession;
|
||||||
|
|
||||||
|
class LogoutUserUseCase
|
||||||
|
{
|
||||||
|
public function __construct(
|
||||||
|
private readonly UserSession $userSession,
|
||||||
|
) {
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getSession(): UserSession
|
||||||
|
{
|
||||||
|
return $this->userSession;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,18 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Template\Handling\Authentication\UseCase\LogoutUser;
|
||||||
|
|
||||||
|
use Template\Data\Business\Entity\UserSession;
|
||||||
|
|
||||||
|
class LogoutUserUseCaseBuilder
|
||||||
|
{
|
||||||
|
public function build(
|
||||||
|
UserSession $userSession,
|
||||||
|
): LogoutUserUseCase {
|
||||||
|
return new LogoutUserUseCase(
|
||||||
|
$userSession,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,25 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Template\Handling\Authentication\UseCase\LogoutUser;
|
||||||
|
|
||||||
|
use Template\Data\Business\Manager\EntityManager;
|
||||||
|
|
||||||
|
class LogoutUserUseCaseHandler
|
||||||
|
{
|
||||||
|
public function __construct(
|
||||||
|
private readonly EntityManager $entityManager,
|
||||||
|
) {
|
||||||
|
}
|
||||||
|
|
||||||
|
public function handle(LogoutUserUseCase $useCase): LogoutUserUseCaseResult
|
||||||
|
{
|
||||||
|
$session = $useCase->getSession();
|
||||||
|
|
||||||
|
$this->entityManager->remove($session);
|
||||||
|
$this->entityManager->flush();
|
||||||
|
|
||||||
|
return new LogoutUserUseCaseResult($session);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,12 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Template\Handling\Authentication\UseCase\LogoutUser;
|
||||||
|
|
||||||
|
class LogoutUserUseCaseResult
|
||||||
|
{
|
||||||
|
public function __construct(
|
||||||
|
) {
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,32 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Template\Handling\Authentication\UseCase\ResetPassword;
|
||||||
|
|
||||||
|
use Ramsey\Uuid\UuidInterface;
|
||||||
|
|
||||||
|
class ResetPasswordUseCase
|
||||||
|
{
|
||||||
|
public function __construct(
|
||||||
|
private readonly UuidInterface $passwordToken,
|
||||||
|
private readonly string $newPassword,
|
||||||
|
private readonly string $passwordConfirmation,
|
||||||
|
) {
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getPasswordToken(): UuidInterface
|
||||||
|
{
|
||||||
|
return $this->passwordToken;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getNewPassword(): string
|
||||||
|
{
|
||||||
|
return $this->newPassword;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getPasswordConfirmation(): string
|
||||||
|
{
|
||||||
|
return $this->passwordConfirmation;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,22 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Template\Handling\Authentication\UseCase\ResetPassword;
|
||||||
|
|
||||||
|
use Ramsey\Uuid\UuidInterface;
|
||||||
|
|
||||||
|
class ResetPasswordUseCaseBuilder
|
||||||
|
{
|
||||||
|
public function build(
|
||||||
|
UuidInterface $passwordToken,
|
||||||
|
string $newPassword,
|
||||||
|
string $passwordConfirmation,
|
||||||
|
): ResetPasswordUseCase {
|
||||||
|
return new ResetPasswordUseCase(
|
||||||
|
$passwordToken,
|
||||||
|
$newPassword,
|
||||||
|
$passwordConfirmation,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,17 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Template\Handling\Authentication\UseCase\ResetPassword;
|
||||||
|
|
||||||
|
class ResetPasswordUseCaseHandler
|
||||||
|
{
|
||||||
|
public function __construct(
|
||||||
|
) {
|
||||||
|
}
|
||||||
|
|
||||||
|
public function handle(ResetPasswordUseCase $useCase): ResetPasswordUseCaseResult
|
||||||
|
{
|
||||||
|
return new ResetPasswordUseCaseResult();
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,12 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Template\Handling\Authentication\UseCase\ResetPassword;
|
||||||
|
|
||||||
|
class ResetPasswordUseCaseResult
|
||||||
|
{
|
||||||
|
public function __construct(
|
||||||
|
) {
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,10 +1,10 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
use Template\Handling\Registration\UseCase\ConfirmRegistration\ConfirmRegistrationUseCaseBuilder;
|
||||||
|
use Template\Handling\Registration\UseCase\ConfirmRegistration\ConfirmRegistrationUseCaseHandler;
|
||||||
|
use Template\Handling\Registration\UseCase\RegisterUser\RegisterUserUseCaseBuilder;
|
||||||
|
use Template\Handling\Registration\UseCase\RegisterUser\RegisterUserUseCaseHandler;
|
||||||
use Template\Handling\Registration\Builder\RegistrationBuilder;
|
use Template\Handling\Registration\Builder\RegistrationBuilder;
|
||||||
use Template\Handling\Registration\Handler\Command\ConfirmRegistration\ConfirmRegistrationCommandBuilder;
|
|
||||||
use Template\Handling\Registration\Handler\Command\ConfirmRegistration\ConfirmRegistrationCommandHandler;
|
|
||||||
use Template\Handling\Registration\Handler\Command\RegisterUser\RegisterUserCommandBuilder;
|
|
||||||
use Template\Handling\Registration\Handler\Command\RegisterUser\RegisterUserCommandHandler;
|
|
||||||
use Template\Handling\Registration\Pipeline\ConfirmRegistration\ConfirmRegistrationPipeline;
|
use Template\Handling\Registration\Pipeline\ConfirmRegistration\ConfirmRegistrationPipeline;
|
||||||
use Template\Handling\Registration\Pipeline\ConfirmRegistration\Step\CreateUserStep;
|
use Template\Handling\Registration\Pipeline\ConfirmRegistration\Step\CreateUserStep;
|
||||||
use Template\Handling\Registration\Pipeline\ConfirmRegistration\Step\LoadRegistrationStep;
|
use Template\Handling\Registration\Pipeline\ConfirmRegistration\Step\LoadRegistrationStep;
|
||||||
@ -42,12 +42,11 @@ return [
|
|||||||
SaveRegistrationAndUserStep::class => AutoWiringFactory::class,
|
SaveRegistrationAndUserStep::class => AutoWiringFactory::class,
|
||||||
|
|
||||||
/// CQRS
|
/// CQRS
|
||||||
// Register User
|
/// ConfirmRegistration
|
||||||
RegisterUserCommandHandler::class => AutoWiringFactory::class,
|
ConfirmRegistrationUseCaseHandler::class => AutoWiringFactory::class,
|
||||||
RegisterUserCommandBuilder::class => AutoWiringFactory::class,
|
ConfirmRegistrationUseCaseBuilder::class => AutoWiringFactory::class,
|
||||||
|
/// RegisterUser
|
||||||
// Confirm Registration
|
RegisterUserUseCaseHandler::class => AutoWiringFactory::class,
|
||||||
ConfirmRegistrationCommandHandler::class => AutoWiringFactory::class,
|
RegisterUserUseCaseBuilder::class => AutoWiringFactory::class,
|
||||||
ConfirmRegistrationCommandBuilder::class => AutoWiringFactory::class,
|
|
||||||
],
|
],
|
||||||
];
|
];
|
||||||
|
|||||||
@ -4,10 +4,10 @@ namespace Template\Handling\Registration\Exception;
|
|||||||
|
|
||||||
use Template\Infrastructure\Exception\ErrorCode;
|
use Template\Infrastructure\Exception\ErrorCode;
|
||||||
use Template\Infrastructure\Exception\ErrorDomain;
|
use Template\Infrastructure\Exception\ErrorDomain;
|
||||||
use Template\Infrastructure\Exception\Exception\Exception;
|
use Template\Infrastructure\Exception\Exception\TemplateException;
|
||||||
use Ramsey\Uuid\UuidInterface;
|
use Ramsey\Uuid\UuidInterface;
|
||||||
|
|
||||||
class RegistrationNotFoundByIdException extends Exception
|
class RegistrationNotFoundByIdException extends TemplateException
|
||||||
{
|
{
|
||||||
private const MESSAGE = 'A Registration with the id %s was not be found!';
|
private const MESSAGE = 'A Registration with the id %s was not be found!';
|
||||||
public function __construct(
|
public function __construct(
|
||||||
|
|||||||
@ -4,9 +4,9 @@ namespace Template\Handling\Registration\Exception;
|
|||||||
|
|
||||||
use Template\Infrastructure\Exception\ErrorCode;
|
use Template\Infrastructure\Exception\ErrorCode;
|
||||||
use Template\Infrastructure\Exception\ErrorDomain;
|
use Template\Infrastructure\Exception\ErrorDomain;
|
||||||
use Template\Infrastructure\Exception\Exception\Exception;
|
use Template\Infrastructure\Exception\Exception\TemplateException;
|
||||||
|
|
||||||
class RegistrationWithIdentifierAlreadyExistsException extends Exception
|
class RegistrationWithIdentifierAlreadyExistsException extends TemplateException
|
||||||
{
|
{
|
||||||
private const MESSAGE = 'A Registration with the identifier %s does already exist!';
|
private const MESSAGE = 'A Registration with the identifier %s does already exist!';
|
||||||
|
|
||||||
|
|||||||
@ -1,28 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace Template\Handling\Registration\Handler\Command\ConfirmRegistration;
|
|
||||||
|
|
||||||
use Ramsey\Uuid\UuidInterface;
|
|
||||||
|
|
||||||
class ConfirmRegistrationCommand
|
|
||||||
{
|
|
||||||
public function __construct(
|
|
||||||
private readonly UuidInterface $id,
|
|
||||||
private readonly string $password,
|
|
||||||
private readonly string $passwordConfirmation,
|
|
||||||
) {
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getId(): UuidInterface {
|
|
||||||
return $this->id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getPassword(): string {
|
|
||||||
return $this->password;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public function getPasswordConfirmation(): string {
|
|
||||||
return $this->passwordConfirmation;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,21 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace Template\Handling\Registration\Handler\Command\ConfirmRegistration;
|
|
||||||
|
|
||||||
use Ramsey\Uuid\UuidInterface;
|
|
||||||
|
|
||||||
class ConfirmRegistrationCommandBuilder
|
|
||||||
{
|
|
||||||
public function build(
|
|
||||||
UuidInterface $id,
|
|
||||||
string $password,
|
|
||||||
string $passwordConfirmation,
|
|
||||||
): ConfirmRegistrationCommand
|
|
||||||
{
|
|
||||||
return new ConfirmRegistrationCommand(
|
|
||||||
$id,
|
|
||||||
$password,
|
|
||||||
$passwordConfirmation
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,23 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace Template\Handling\Registration\Handler\Command\ConfirmRegistration;
|
|
||||||
|
|
||||||
use Template\Data\Business\Entity\User;
|
|
||||||
use Template\Handling\Registration\Pipeline\ConfirmRegistration\ConfirmRegistrationPayload;
|
|
||||||
use Template\Handling\Registration\Pipeline\ConfirmRegistration\ConfirmRegistrationPipeline;
|
|
||||||
|
|
||||||
class ConfirmRegistrationCommandHandler
|
|
||||||
{
|
|
||||||
public function __construct(
|
|
||||||
private readonly ConfirmRegistrationPipeline $pipeline,
|
|
||||||
) {
|
|
||||||
}
|
|
||||||
|
|
||||||
public function execute(ConfirmRegistrationCommand $command): User
|
|
||||||
{
|
|
||||||
$payload = new ConfirmRegistrationPayload($command);
|
|
||||||
$this->pipeline->handle($payload);
|
|
||||||
|
|
||||||
return $payload->getUser();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,25 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace Template\Handling\Registration\Handler\Command\RegisterUser;
|
|
||||||
|
|
||||||
class RegisterUserCommand
|
|
||||||
{
|
|
||||||
public function __construct(
|
|
||||||
private readonly string $username,
|
|
||||||
private readonly string $mail,
|
|
||||||
private readonly string $host
|
|
||||||
) {
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getUsername(): string {
|
|
||||||
return $this->username;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getMail(): string {
|
|
||||||
return $this->mail;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getHost(): string {
|
|
||||||
return $this->host;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,19 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace Template\Handling\Registration\Handler\Command\RegisterUser;
|
|
||||||
|
|
||||||
class RegisterUserCommandBuilder
|
|
||||||
{
|
|
||||||
public function build(
|
|
||||||
string $username,
|
|
||||||
string $mail,
|
|
||||||
string $host
|
|
||||||
): RegisterUserCommand
|
|
||||||
{
|
|
||||||
return new RegisterUserCommand(
|
|
||||||
$username,
|
|
||||||
$mail,
|
|
||||||
$host
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,23 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace Template\Handling\Registration\Handler\Command\RegisterUser;
|
|
||||||
|
|
||||||
use Template\Data\Business\Entity\Registration;
|
|
||||||
use Template\Handling\Registration\Pipeline\RegisterUser\RegisterUserPayload;
|
|
||||||
use Template\Handling\Registration\Pipeline\RegisterUser\RegisterUserPipeline;
|
|
||||||
|
|
||||||
class RegisterUserCommandHandler
|
|
||||||
{
|
|
||||||
public function __construct(
|
|
||||||
private readonly RegisterUserPipeline $pipeline,
|
|
||||||
) {
|
|
||||||
}
|
|
||||||
|
|
||||||
public function execute(RegisterUserCommand $command): Registration
|
|
||||||
{
|
|
||||||
$payload = new RegisterUserPayload($command);
|
|
||||||
$this->pipeline->handle($payload);
|
|
||||||
|
|
||||||
return $payload->getRegistration();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -8,6 +8,7 @@ use Template\Data\Business\Entity\Registration;
|
|||||||
use Template\Data\Business\Entity\User;
|
use Template\Data\Business\Entity\User;
|
||||||
use Template\Handling\Registration\Handler\Command\ConfirmRegistration\ConfirmRegistrationCommand;
|
use Template\Handling\Registration\Handler\Command\ConfirmRegistration\ConfirmRegistrationCommand;
|
||||||
use Template\Handling\Registration\Handler\Command\RegisterUser\RegisterUserCommand;
|
use Template\Handling\Registration\Handler\Command\RegisterUser\RegisterUserCommand;
|
||||||
|
use Template\Handling\Registration\UseCase\ConfirmRegistration\ConfirmRegistrationUseCase;
|
||||||
|
|
||||||
class ConfirmRegistrationPayload
|
class ConfirmRegistrationPayload
|
||||||
{
|
{
|
||||||
@ -15,11 +16,11 @@ class ConfirmRegistrationPayload
|
|||||||
private readonly ?User $user;
|
private readonly ?User $user;
|
||||||
|
|
||||||
public function __construct(
|
public function __construct(
|
||||||
private readonly ConfirmRegistrationCommand $command
|
private readonly ConfirmRegistrationUseCase $command
|
||||||
) {
|
) {
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getCommand(): ConfirmRegistrationCommand
|
public function getUseCase(): ConfirmRegistrationUseCase
|
||||||
{
|
{
|
||||||
return $this->command;
|
return $this->command;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -33,14 +33,14 @@ class CreateUserStep implements TaskInterface
|
|||||||
PipelineInterface $pipeline
|
PipelineInterface $pipeline
|
||||||
): void
|
): void
|
||||||
{
|
{
|
||||||
/** @var ConfirmRegistrationCommand $command */
|
/** @var ConfirmRegistrationCommand $useCase */
|
||||||
$command = $payload->getCommand();
|
$useCase = $payload->getUseCase();
|
||||||
$registration = $payload->getRegistration();
|
$registration = $payload->getRegistration();
|
||||||
|
|
||||||
if (
|
if (
|
||||||
!$this->passwordMatchRule->appliesTo(
|
!$this->passwordMatchRule->appliesTo(
|
||||||
$command->getPassword(),
|
$useCase->getPassword(),
|
||||||
$command->getPasswordConfirmation()
|
$useCase->getPasswordConfirmation()
|
||||||
)
|
)
|
||||||
) {
|
) {
|
||||||
throw new UserPasswordMismatchException();
|
throw new UserPasswordMismatchException();
|
||||||
@ -49,7 +49,7 @@ class CreateUserStep implements TaskInterface
|
|||||||
$createUserCommand = $this->createUserCommandBuilder->build(
|
$createUserCommand = $this->createUserCommandBuilder->build(
|
||||||
username: $registration->getUsername(),
|
username: $registration->getUsername(),
|
||||||
mail: $registration->getMail(),
|
mail: $registration->getMail(),
|
||||||
password: $command->getPassword(),
|
password: $useCase->getPassword(),
|
||||||
);
|
);
|
||||||
$user = $this->createUserCommandHandler->execute($createUserCommand);
|
$user = $this->createUserCommandHandler->execute($createUserCommand);
|
||||||
|
|
||||||
|
|||||||
@ -24,20 +24,23 @@ class LoadRegistrationStep implements TaskInterface
|
|||||||
) {
|
) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @throws RegistrationNotFoundByIdException
|
||||||
|
*/
|
||||||
public function __invoke(
|
public function __invoke(
|
||||||
$payload,
|
$payload,
|
||||||
PipelineInterface $pipeline
|
PipelineInterface $pipeline
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
$command = $payload->getCommand();
|
$useCase = $payload->getUseCase();
|
||||||
|
|
||||||
/** @var Registration $registration */
|
/** @var Registration $registration */
|
||||||
$registration = $this->registrationRepository->findOneBy([
|
$registration = $this->registrationRepository->findOneBy([
|
||||||
'id' => $command->getId()
|
'id' => $useCase->getId()
|
||||||
]) ?? null;
|
]) ?? null;
|
||||||
|
|
||||||
if ($registration === null) {
|
if ($registration === null) {
|
||||||
throw new RegistrationNotFoundByIdException($command->getId());
|
throw new RegistrationNotFoundByIdException($useCase->getId());
|
||||||
}
|
}
|
||||||
|
|
||||||
$payload->setRegistration($registration);
|
$payload->setRegistration($registration);
|
||||||
|
|||||||
@ -6,19 +6,20 @@ namespace Template\Handling\Registration\Pipeline\RegisterUser;
|
|||||||
|
|
||||||
use Template\Data\Business\Entity\Registration;
|
use Template\Data\Business\Entity\Registration;
|
||||||
use Template\Handling\Registration\Handler\Command\RegisterUser\RegisterUserCommand;
|
use Template\Handling\Registration\Handler\Command\RegisterUser\RegisterUserCommand;
|
||||||
|
use Template\Handling\Registration\UseCase\RegisterUser\RegisterUserUseCase;
|
||||||
|
|
||||||
class RegisterUserPayload
|
class RegisterUserPayload
|
||||||
{
|
{
|
||||||
private readonly ?Registration $registration;
|
private readonly ?Registration $registration;
|
||||||
|
|
||||||
public function __construct(
|
public function __construct(
|
||||||
private readonly RegisterUserCommand $command
|
private readonly RegisterUserUseCase $useCase,
|
||||||
) {
|
) {
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getCommand(): RegisterUserCommand
|
public function getUseCase(): RegisterUserUseCase
|
||||||
{
|
{
|
||||||
return $this->command;
|
return $this->useCase;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getRegistration(): ?Registration
|
public function getRegistration(): ?Registration
|
||||||
|
|||||||
@ -20,11 +20,11 @@ class BuildRegistrationStep implements TaskInterface
|
|||||||
PipelineInterface $pipeline
|
PipelineInterface $pipeline
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
$command = $payload->getCommand();
|
$useCase = $payload->getUseCase();
|
||||||
|
|
||||||
$registration = $this->builder->build(
|
$registration = $this->builder->build(
|
||||||
username: $command->getUsername(),
|
username: $useCase->getUsername(),
|
||||||
mail: $command->getMail()
|
mail: $useCase->getMail()
|
||||||
);
|
);
|
||||||
|
|
||||||
$payload->setRegistration($registration);
|
$payload->setRegistration($registration);
|
||||||
|
|||||||
@ -28,13 +28,13 @@ class CheckIdentifierStep implements TaskInterface
|
|||||||
PipelineInterface $pipeline
|
PipelineInterface $pipeline
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
$command = $payload->getCommand();
|
$useCase = $payload->getUseCase();
|
||||||
|
|
||||||
$this->userWithIdentifierAlreadyExistsRule->appliesTo($command->getMail());
|
$this->userWithIdentifierAlreadyExistsRule->appliesTo($useCase->getMail());
|
||||||
$this->userWithIdentifierAlreadyExistsRule->appliesTo($command->getUsername());
|
$this->userWithIdentifierAlreadyExistsRule->appliesTo($useCase->getUsername());
|
||||||
|
|
||||||
$this->registrationWithIdentifierAlreadyExistsRule->appliesTo($command->getMail());
|
$this->registrationWithIdentifierAlreadyExistsRule->appliesTo($useCase->getMail());
|
||||||
$this->registrationWithIdentifierAlreadyExistsRule->appliesTo($command->getUsername());
|
$this->registrationWithIdentifierAlreadyExistsRule->appliesTo($useCase->getUsername());
|
||||||
|
|
||||||
$pipeline->next()($payload, $pipeline);
|
$pipeline->next()($payload, $pipeline);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -22,7 +22,7 @@ class SendMailStep implements TaskInterface
|
|||||||
PipelineInterface $pipeline
|
PipelineInterface $pipeline
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
$command = $payload->getCommand();
|
$useCase = $payload->getUseCase();
|
||||||
$registration = $payload->getRegistration();
|
$registration = $payload->getRegistration();
|
||||||
|
|
||||||
$this->requestService->request(
|
$this->requestService->request(
|
||||||
@ -31,13 +31,13 @@ class SendMailStep implements TaskInterface
|
|||||||
[
|
[
|
||||||
'template-identifier' => 'new-account',
|
'template-identifier' => 'new-account',
|
||||||
'sender' => 'info@stack-up.de',
|
'sender' => 'info@stack-up.de',
|
||||||
'recipient' => $command->getMail(),
|
'recipient' => $useCase->getMail(),
|
||||||
'data' => [
|
'data' => [
|
||||||
'username' => $command->getUsername(),
|
'username' => $useCase->getUsername(),
|
||||||
'confirmationLink' =>
|
'confirmationLink' =>
|
||||||
sprintf(
|
sprintf(
|
||||||
self::CONFIRM_LINK,
|
self::CONFIRM_LINK,
|
||||||
$command->getHost(),
|
$useCase->getHost(),
|
||||||
$registration->getId()->toString()
|
$registration->getId()->toString()
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
|
|||||||
@ -0,0 +1,32 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Template\Handling\Registration\UseCase\ConfirmRegistration;
|
||||||
|
|
||||||
|
use Ramsey\Uuid\UuidInterface;
|
||||||
|
|
||||||
|
class ConfirmRegistrationUseCase
|
||||||
|
{
|
||||||
|
public function __construct(
|
||||||
|
private readonly UuidInterface $id,
|
||||||
|
private readonly string $password,
|
||||||
|
private readonly string $passwordConfirmation,
|
||||||
|
) {
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getId(): UuidInterface
|
||||||
|
{
|
||||||
|
return $this->id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getPassword(): string
|
||||||
|
{
|
||||||
|
return $this->password;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getPasswordConfirmation(): string
|
||||||
|
{
|
||||||
|
return $this->passwordConfirmation;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,22 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Template\Handling\Registration\UseCase\ConfirmRegistration;
|
||||||
|
|
||||||
|
use Ramsey\Uuid\UuidInterface;
|
||||||
|
|
||||||
|
class ConfirmRegistrationUseCaseBuilder
|
||||||
|
{
|
||||||
|
public function build(
|
||||||
|
UuidInterface $id,
|
||||||
|
string $password,
|
||||||
|
string $passwordConfirmation,
|
||||||
|
): ConfirmRegistrationUseCase {
|
||||||
|
return new ConfirmRegistrationUseCase(
|
||||||
|
$id,
|
||||||
|
$password,
|
||||||
|
$passwordConfirmation,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,24 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Template\Handling\Registration\UseCase\ConfirmRegistration;
|
||||||
|
|
||||||
|
use Template\Handling\Registration\Pipeline\ConfirmRegistration\ConfirmRegistrationPayload;
|
||||||
|
use Template\Handling\Registration\Pipeline\ConfirmRegistration\ConfirmRegistrationPipeline;
|
||||||
|
|
||||||
|
class ConfirmRegistrationUseCaseHandler
|
||||||
|
{
|
||||||
|
public function __construct(
|
||||||
|
private readonly ConfirmRegistrationPipeline $pipeline,
|
||||||
|
) {
|
||||||
|
}
|
||||||
|
|
||||||
|
public function handle(ConfirmRegistrationUseCase $useCase): ConfirmRegistrationUseCaseResult
|
||||||
|
{
|
||||||
|
$payload = new ConfirmRegistrationPayload($useCase);
|
||||||
|
$this->pipeline->handle($payload);
|
||||||
|
|
||||||
|
return new ConfirmRegistrationUseCaseResult($payload->getUser());
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,20 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Template\Handling\Registration\UseCase\ConfirmRegistration;
|
||||||
|
|
||||||
|
use Template\Data\Business\Entity\User;
|
||||||
|
|
||||||
|
class ConfirmRegistrationUseCaseResult
|
||||||
|
{
|
||||||
|
public function __construct(
|
||||||
|
private User $user,
|
||||||
|
) {
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getUser(): User
|
||||||
|
{
|
||||||
|
return $this->user;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,24 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Template\Handling\Registration\UseCase\RegisterUser;
|
||||||
|
|
||||||
|
class RegisterUserUseCase
|
||||||
|
{
|
||||||
|
public function __construct(
|
||||||
|
private readonly string $username,
|
||||||
|
private readonly string $mail,
|
||||||
|
) {
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getUsername(): string
|
||||||
|
{
|
||||||
|
return $this->username;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getMail(): string
|
||||||
|
{
|
||||||
|
return $this->mail;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,18 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Template\Handling\Registration\UseCase\RegisterUser;
|
||||||
|
|
||||||
|
class RegisterUserUseCaseBuilder
|
||||||
|
{
|
||||||
|
public function build(
|
||||||
|
string $username,
|
||||||
|
string $mail,
|
||||||
|
): RegisterUserUseCase {
|
||||||
|
return new RegisterUserUseCase(
|
||||||
|
$username,
|
||||||
|
$mail,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,24 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Template\Handling\Registration\UseCase\RegisterUser;
|
||||||
|
|
||||||
|
use Template\Handling\Registration\Pipeline\RegisterUser\RegisterUserPayload;
|
||||||
|
use Template\Handling\Registration\Pipeline\RegisterUser\RegisterUserPipeline;
|
||||||
|
|
||||||
|
class RegisterUserUseCaseHandler
|
||||||
|
{
|
||||||
|
public function __construct(
|
||||||
|
private readonly RegisterUserPipeline $pipeline,
|
||||||
|
) {
|
||||||
|
}
|
||||||
|
|
||||||
|
public function handle(RegisterUserUseCase $useCase): RegisterUserUseCaseResult
|
||||||
|
{
|
||||||
|
$payload = new RegisterUserPayload($useCase);
|
||||||
|
$this->pipeline->handle($payload);
|
||||||
|
|
||||||
|
return new RegisterUserUseCaseResult($payload->getRegistration());
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,20 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Template\Handling\Registration\UseCase\RegisterUser;
|
||||||
|
|
||||||
|
use Template\Data\Business\Entity\Registration;
|
||||||
|
|
||||||
|
class RegisterUserUseCaseResult
|
||||||
|
{
|
||||||
|
public function __construct(
|
||||||
|
private Registration $registration,
|
||||||
|
) {
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getRegistration(): Registration
|
||||||
|
{
|
||||||
|
return $this->registration;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,12 +1,14 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
use Template\Handling\User\Builder\UserBuilder;
|
use Template\Handling\User\Builder\UserBuilder;
|
||||||
use Template\Handling\User\Handler\Command\ChangePassword\ChangePasswordCommandBuilder;
|
use Template\Handling\User\UseCase\Create\CreateUseCaseHandler;
|
||||||
use Template\Handling\User\Handler\Command\ChangePassword\ChangePasswordCommandHandler;
|
use Template\Handling\User\UseCase\Create\CreateUseCaseBuilder;
|
||||||
use Template\Handling\User\Handler\Command\ChangeUsername\ChangeUsernameCommandBuilder;
|
use Template\Handling\User\UseCase\ChangePassword\ChangePasswordUseCaseHandler;
|
||||||
use Template\Handling\User\Handler\Command\ChangeUsername\ChangeUsernameCommandHandler;
|
use Template\Handling\User\UseCase\ChangePassword\ChangePasswordUseCaseBuilder;
|
||||||
use Template\Handling\User\Handler\Command\CreateUser\CreateUserCommandBuilder;
|
use Template\Handling\User\UseCase\ChangeUsername\ChangeUsernameUseCaseHandler;
|
||||||
use Template\Handling\User\Handler\Command\CreateUser\CreateUserCommandHandler;
|
use Template\Handling\User\UseCase\ChangeUsername\ChangeUsernameUseCaseBuilder;
|
||||||
|
use Template\Handling\User\UseCase\ReadList\ReadListUseCaseHandler;
|
||||||
|
use Template\Handling\User\UseCase\ReadList\ReadListUseCaseBuilder;
|
||||||
use Template\Handling\User\Rule\UserPasswordMatchRule;
|
use Template\Handling\User\Rule\UserPasswordMatchRule;
|
||||||
use Template\Handling\User\Rule\UserWithIdentifierAlreadyExistsRule;
|
use Template\Handling\User\Rule\UserWithIdentifierAlreadyExistsRule;
|
||||||
use Reinfi\DependencyInjection\Factory\AutoWiringFactory;
|
use Reinfi\DependencyInjection\Factory\AutoWiringFactory;
|
||||||
@ -24,16 +26,17 @@ return [
|
|||||||
UserPasswordMatchRule::class => AutoWiringFactory::class,
|
UserPasswordMatchRule::class => AutoWiringFactory::class,
|
||||||
|
|
||||||
/// CQRS
|
/// CQRS
|
||||||
// Create User
|
/// Create
|
||||||
CreateUserCommandHandler::class => AutoWiringFactory::class,
|
CreateUseCaseHandler::class => AutoWiringFactory::class,
|
||||||
CreateUserCommandBuilder::class => AutoWiringFactory::class,
|
CreateUseCaseBuilder::class => AutoWiringFactory::class,
|
||||||
|
/// ChangePassword
|
||||||
// Change Password
|
ChangePasswordUseCaseHandler::class => AutoWiringFactory::class,
|
||||||
ChangePasswordCommandHandler::class => AutoWiringFactory::class,
|
ChangePasswordUseCaseBuilder::class => AutoWiringFactory::class,
|
||||||
ChangePasswordCommandBuilder::class => AutoWiringFactory::class,
|
/// ChangeUsername
|
||||||
|
ChangeUsernameUseCaseHandler::class => AutoWiringFactory::class,
|
||||||
// Change Username
|
ChangeUsernameUseCaseBuilder::class => AutoWiringFactory::class,
|
||||||
ChangeUsernameCommandHandler::class => AutoWiringFactory::class,
|
/// ReadList
|
||||||
ChangeUsernameCommandBuilder::class => AutoWiringFactory::class,
|
ReadListUseCaseHandler::class => AutoWiringFactory::class,
|
||||||
|
ReadListUseCaseBuilder::class => AutoWiringFactory::class,
|
||||||
],
|
],
|
||||||
];
|
];
|
||||||
|
|||||||
@ -5,10 +5,10 @@ namespace Template\Handling\User\Builder;
|
|||||||
use Template\Data\Business\Entity\Role;
|
use Template\Data\Business\Entity\Role;
|
||||||
use Template\Data\Business\Entity\User;
|
use Template\Data\Business\Entity\User;
|
||||||
use Template\Data\Business\Repository\RoleRepository;
|
use Template\Data\Business\Repository\RoleRepository;
|
||||||
use Template\Handling\Role\Exception\RoleNotFoundByIdentifierException;
|
|
||||||
use Template\Infrastructure\Encryption\Client\EncryptionClient;
|
use Template\Infrastructure\Encryption\Client\EncryptionClient;
|
||||||
use Reinfi\DependencyInjection\Annotation\Inject;
|
use Reinfi\DependencyInjection\Annotation\Inject;
|
||||||
use Reinfi\DependencyInjection\Annotation\InjectDoctrineRepository;
|
use Reinfi\DependencyInjection\Annotation\InjectDoctrineRepository;
|
||||||
|
use Template\Infrastructure\Rbac\Exception\RoleNotFoundByIdentifierException;
|
||||||
|
|
||||||
class UserBuilder
|
class UserBuilder
|
||||||
{
|
{
|
||||||
|
|||||||
@ -4,9 +4,9 @@ namespace Template\Handling\User\Exception;
|
|||||||
|
|
||||||
use Template\Infrastructure\Exception\ErrorCode;
|
use Template\Infrastructure\Exception\ErrorCode;
|
||||||
use Template\Infrastructure\Exception\ErrorDomain;
|
use Template\Infrastructure\Exception\ErrorDomain;
|
||||||
use Template\Infrastructure\Exception\Exception\Exception;
|
use Template\Infrastructure\Exception\Exception\TemplateException;
|
||||||
|
|
||||||
class UserNotFoundByIdentifierException extends Exception {
|
class UserNotFoundByIdentifierException extends TemplateException {
|
||||||
|
|
||||||
private const MESSAGE = 'The user with the Identifier %s was not found!';
|
private const MESSAGE = 'The user with the Identifier %s was not found!';
|
||||||
|
|
||||||
@ -22,5 +22,3 @@ class UserNotFoundByIdentifierException extends Exception {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
?>
|
|
||||||
@ -4,9 +4,9 @@ namespace Template\Handling\User\Exception;
|
|||||||
|
|
||||||
use Template\Infrastructure\Exception\ErrorCode;
|
use Template\Infrastructure\Exception\ErrorCode;
|
||||||
use Template\Infrastructure\Exception\ErrorDomain;
|
use Template\Infrastructure\Exception\ErrorDomain;
|
||||||
use Template\Infrastructure\Exception\Exception\Exception;
|
use Template\Infrastructure\Exception\Exception\TemplateException;
|
||||||
|
|
||||||
class UserPasswordMismatchException extends Exception {
|
class UserPasswordMismatchException extends TemplateException {
|
||||||
|
|
||||||
private const MESSAGE = 'The two passwords do not match!';
|
private const MESSAGE = 'The two passwords do not match!';
|
||||||
|
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user