An artisan command to generate usecase / request / resource classes to implement pseudo clean architecture.
kent013/artisan-command-pseudo-ca is a Laravel package for an artisan command to generate usecase / request / resource classes to implement pseudo clean architecture..
It currently has 1 GitHub stars and 13 downloads on Packagist (latest version v0.0.4).
Install it with composer require kent013/artisan-command-pseudo-ca.
Discover more Laravel packages by kent013
or browse all Laravel packages to compare alternatives.
Last updated
Artisan make command to generate usecase / request / resource classes to implement pseudo clean architecture.
This command is based on the article about pseudo clean architecture.
pseudo clean architecture for laravel is a relaxed domain modelling architecture which consists with Request, Resource and Usecase.
Again this architecture is proposed by mpyw. And I'm using this architecture in my several projects. so that I just need a class generator.
According to the article written by mpyw, Request is like
class StoreRequest extends FormRequest
{
public function authorize(Gate $gate): bool
{
$community = $this->route()->parameter('community');
return $gate->authorize('store', [Post::class, $community]);
}
public function rules(): array
{
return [
'title' => 'required|string|max:30',
'body' => 'required|string|max:10000',
];
}
public function makePost(): Post
{
return new Post($this->validated());
}
}
Resource is like
class PostResource extends JsonResource
{
public function toArray($request): array
{
return [
'title' => $this->resource->title,
'body' => $this->resource->body,
'created_at' => $this->resource->created_at,
'updated_at' => $this->resource->updated_at,
];
}
}
Usecase is like
class StoreAction
{
public function storeAfterDomainValidation(User $user, Community $community): self
{
$userPostsCountToday = $user
->posts()
->where('community_id', $community->id)
->where('created_at', '>=', Carbon::midnight())
->count();
if ($userPostsCountToday >= 200) {
throw new PostLimitExceededException('Exceeded');
}
$post->save();
return $post;
}
}
And controller with Request, Resource and Usecase goes like
class PostContoller
{
public function store(StoreRequest $request, StoreAction $action): PostResource
{
$post = $request->makePost();
try {
return new PostResource($action($user, $community, $post));
} catch (PostLimitExceededException $e) {
throw new TooManyRequestsHttpException(null, $e->getMessage(), $e);
}
}
}
composer require --dev kent013/artisan-command-pseudo-ca
php artisan vendor:publish --tag="pseudoca"
PSEUDOCA_USECASE_NS="\UseCases"
PSEUDOCA_REQUEST_NS="\Http\Requests"
PSEUDOCA_RESOURCE_NS="\Http\Resources"
If you want to change namespaces, please add above lines in your .env file and change values.
php artisan make:pseudoca:usecase LoginAction
will generates LoginAction class under root namespace suffixed with PSEUDOCA_USECASE_NS. Default namespace is \UseCase.
php artisan make:pseudoca:request LoginRequest
will generates LoginRequest class under root namespace suffixed with PSEUDOCA_REQUEST_NS. Default namespace is \Http\Requests.
php artisan make:pseudoca:resource LoginResource
will generates LoginResource class under root namespace suffixed with PSEUDOCA_RESOURCE_NS. Default namespace is \Http\Resources.
php artisan make:pseudoca Login
will generates LoginResource, LoginRequest and LoginUsecase.