Skip to content

Commit

Permalink
added templates for breeze
Browse files Browse the repository at this point in the history
  • Loading branch information
dcblogdev committed Jan 28, 2024
1 parent 9cc186d commit 1be3d26
Show file tree
Hide file tree
Showing 74 changed files with 1,242 additions and 11 deletions.
4 changes: 3 additions & 1 deletion config/module-generator.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@
return [
'template' => [
'default' => 'stubs/module-generator/default',
'Breeze - CRUD' => 'stubs/module-generator/breeze-crud',
'Breeze - CRUD Web & API' => 'stubs/module-generator/breeze-crud-full',
'Breeze - CRUD Web only' => 'stubs/module-generator/breeze-crud-web',
'Breeze - CRUD API only' => 'stubs/module-generator/breeze-crud-api'
],
'ignore_files' => ['module.json']
];
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
<?php

namespace Modules\{Module}\App\Http\Controllers\Api\V1;

use App\Http\Controllers\Controller;
use Modules\{Module}\App\Http\Requests\Api\V1\{Model}Request;
use Modules\{Module}\App\Http\Resources\Api\V1\{Model}Collection;
use Modules\{Module}\App\Http\Resources\Api\V1\{Model}Resource;
use Modules\{Module}\App\Models\{Model};
use Symfony\Component\HttpFoundation\Response;

class {Module}Controller extends Controller
{
public function index(): {Model}Collection
{
${module} = {Model}::paginate();

return new {Model}Collection(${module});
}

public function store({Model}Request $request): {Model}Resource
{
${model} = {Model}::create($request->validated());

return new {Model}Resource(${model});
}

public function show({Model} ${Model}): {Model}Resource
{
return new {Model}Resource(${Model});
}

public function update({Model}Request $request, {Model} ${model}): {Model}Resource
{
${model}->update($request->validated());

return new {Model}Resource(${model});
}

public function destroy({Model} ${model}): Response
{
${model}->delete();

return response()->noContent();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<?php

namespace Modules\{Module}\App\Http\Requests\Api\V1;

use Illuminate\Foundation\Http\FormRequest;

class {Model}Request extends FormRequest
{
public function rules(): array
{
return [
'name' => [
'required',
'string'
]
];
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<?php

namespace Modules\{Module}\App\Http\Resources\Api\V1;

use Illuminate\Http\Resources\Json\ResourceCollection;

class {Model}Collection extends ResourceCollection
{
public function toArray($request): array
{
return parent::toArray($request);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<?php

namespace Modules\{Module}\App\Http\Resources\Api\V1;

use Illuminate\Http\Resources\Json\JsonResource;

class {Model}Resource extends JsonResource
{
public function toArray($request): array
{
return parent::toArray($request);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<?php

namespace Modules\{Module}\App\Providers;

use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;
use Illuminate\Support\Facades\Route;

class RouteServiceProvider extends ServiceProvider
{
protected $moduleNamespace = 'Modules\{Module}\App\Http\Controllers';

public function map(): void
{
Route::prefix('api/v1')
->middleware('api')
->namespace($this->moduleNamespace)
->group(module_path('{module}', '/Routes/api/v1.php'));
}
}
8 changes: 8 additions & 0 deletions stubs/module-generator/breeze-crud-api/routes/api/v1.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<?php

use Illuminate\Support\Facades\Route;
use Modules\{Module}\App\Http\Controllers\Api\V1\{Module}Controller;

Route::middleware(['auth:sanctum'])->group(function () {
Route::ApiResource('{module}', {Module}Controller::class, ['as' => 'api.v1']);
});
46 changes: 46 additions & 0 deletions stubs/module-generator/breeze-crud-api/tests/WebyController.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
<?php

namespace tests;

use App\Http\Controllers\Controller;
use Modules\Weby\App\Http\Requests\Api\V1\WebyRequest;
use Modules\Weby\App\Http\Resources\Api\V1\WebyCollection;
use Modules\Weby\App\Http\Resources\Api\V1\WebyResource;
use Modules\Weby\App\Models\Weby;
use Symfony\Component\HttpFoundation\Response;

class WebyController extends Controller
{
public function index(): WebyCollection
{
$weby = Weby::paginate();

return new WebyCollection($weby);
}

public function store(WebyRequest $request): WebyResource
{
$weby = Weby::create($request->validated());

return new WebyResource($book);
}

public function show(Weby $Weby): WebyResource
{
return new WebyResource($Weby);
}

public function update(WebyRequest $request, Weby $weby): WebyResource
{
$weby->update($request->validated());

return new WebyResource($weby);
}

public function destroy(Weby $weby): Response
{
$weby->delete();

return response()->noContent();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
<?php

use App\Models\User;
use Illuminate\Foundation\Testing\LazilyRefreshDatabase;
use function Pest\Laravel\postJson;

uses(Tests\TestCase::class, LazilyRefreshDatabase::class);

beforeEach(function () {
$user = User::factory()->create();
$this->actingAs($user);
});

test('name is required for creating a {model}', function() {
postJson(route('api.v1.{module}.store'))
->assertUnprocessable()
->assertJsonValidationErrors('name');
});

test('Can create a {module}', function() {
postJson(route('api.v1.{module}.store'), ['name' => fake()->name])
->assertJsonMissingValidationErrors()
->assertCreated();
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<?php

use App\Models\User;
use Illuminate\Foundation\Testing\LazilyRefreshDatabase;
use Modules\{Module}\App\Models\{Model};
use function Pest\Laravel\deleteJson;

uses(Tests\TestCase::class, LazilyRefreshDatabase::class);

test('Can delete a {model}', function() {
$user = User::factory()->create();
$this->actingAs($user);

${model} = {Model}::factory()->create();

$this->assertDatabaseCount({Model}::class, 1);

deleteJson(route('api.v1.{module}.destroy', ${model}))
->assertJsonMissingValidationErrors()
->assertNoContent();

$this->assertDatabaseCount({Model}::class, 0);
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
<?php

use App\Models\User;
use Illuminate\Foundation\Testing\LazilyRefreshDatabase;
use Modules\{Module}\App\Models\{Model};
use function Pest\Laravel\putJson;

uses(Tests\TestCase::class, LazilyRefreshDatabase::class);

beforeEach(function () {
$user = User::factory()->create();
$this->actingAs($user);
});

test('name is required for editing a {model}', function() {
${model} = {Model}::factory()->create();

putJson(route('api.v1.{module}.update', ${model}))
->assertJsonValidationErrors('name');
});

test('Can update a {model}', function() {
${model} = {Model}::factory()->create();

$name = fake()->name;

putJson(route('api.v1.{module}.update', ${module}), ['name' => $name])
->assertJsonMissingValidationErrors()
->assertOk();

$this->assertDatabaseHas({Model}::class, ['name' => $name]);
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<?php

use App\Models\User;
use Illuminate\Foundation\Testing\LazilyRefreshDatabase;
use function Pest\Laravel\getJson;

uses(Tests\TestCase::class, LazilyRefreshDatabase::class);

test('can see books page', function() {
$user = User::factory()->create();
$this->actingAs($user);

getJson(route('api.v1.{module}.index'))->assertOk();
});
1 change: 1 addition & 0 deletions stubs/module-generator/breeze-crud-full/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
.idea
21 changes: 21 additions & 0 deletions stubs/module-generator/breeze-crud-full/App/Entities/Model.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<?php

namespace Modules\{Module}\App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Modules\{Module}\Database\Factories\{Model}Factory;

class {Model} extends Model
{
use HasFactory;

protected $fillable = [
'name'
];

protected static function newFactory(): {Model}Factory
{
return {Model}Factory::new();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
<?php

namespace Modules\{Module}\App\Http\Controllers\Api\V1;

use App\Http\Controllers\Controller;
use Modules\{Module}\App\Http\Requests\Api\V1\{Model}Request;
use Modules\{Module}\App\Http\Resources\Api\V1\{Model}Collection;
use Modules\{Module}\App\Http\Resources\Api\V1\{Model}Resource;
use Modules\{Module}\App\Models\{Model};
use Symfony\Component\HttpFoundation\Response;

class {Module}Controller extends Controller
{
public function index(): {Model}Collection
{
${module} = {Model}::paginate();

return new {Model}Collection(${module});
}

public function store({Model}Request $request): {Model}Resource
{
${model} = {Model}::create($request->validated());

return new {Model}Resource(${model});
}

public function show({Model} ${Model}): {Model}Resource
{
return new {Model}Resource(${Model});
}

public function update({Model}Request $request, {Model} ${model}): {Model}Resource
{
${model}->update($request->validated());

return new {Model}Resource(${model});
}

public function destroy({Model} ${model}): Response
{
${model}->delete();

return response()->noContent();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<?php

namespace Modules\{Module}\App\Http\Requests\Api\V1;

use Illuminate\Foundation\Http\FormRequest;

class {Model}Request extends FormRequest
{
public function rules(): array
{
return [
'name' => [
'required',
'string'
]
];
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<?php

namespace Modules\{Module}\App\Http\Resources\Api\V1;

use Illuminate\Http\Resources\Json\ResourceCollection;

class {Model}Collection extends ResourceCollection
{
public function toArray($request): array
{
return parent::toArray($request);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<?php

namespace Modules\{Module}\App\Http\Resources\Api\V1;

use Illuminate\Http\Resources\Json\JsonResource;

class {Model}Resource extends JsonResource
{
public function toArray($request): array
{
return parent::toArray($request);
}
}
Loading

0 comments on commit 1be3d26

Please sign in to comment.