Skip to content

Commit

Permalink
a lot
Browse files Browse the repository at this point in the history
- roles package (migrations and model)
- bootstrapping of roles (plus related files)
- wip on store blog
  • Loading branch information
SethSharp committed Jan 28, 2024
1 parent 5c93c45 commit ee66fb7
Show file tree
Hide file tree
Showing 17 changed files with 1,991 additions and 42 deletions.
29 changes: 29 additions & 0 deletions app/Console/Commands/Bootstrap.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;
use App\Console\Commands\Bootstrap\Roles;
use App\Domain\Workspace\Models\Workspace;
use App\Console\Commands\Bootstrap\Workflows;
use App\Domain\Workspace\Enums\WorkspaceType;
use App\Console\Commands\Bootstrap\Permissions;
use App\Console\Commands\Bootstrap\FileCategories;
use App\Console\Commands\Bootstrap\RolePermissions;
use App\Console\Commands\Bootstrap\Specialisations;
use App\Console\Commands\Bootstrap\WorkflowTriggers;
use App\Domain\Aviation\Casa\Commands\BootstrapCasa;
use Spatie\Multitenancy\Commands\Concerns\TenantAware;

class Bootstrap extends Command
{
protected $signature = 'bootstrap';
protected $description = 'Bootstrap all';

public function handle(): void
{
$this->info("Bootstrapping...");

$this->call(Roles::class);
}
}
18 changes: 18 additions & 0 deletions app/Console/Commands/Bootstrap/Roles.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<?php

namespace App\Console\Commands\Bootstrap;

use Illuminate\Console\Command;
use App\Domain\Iam\Actions\SyncRolesAction;

class Roles extends Command
{
protected $signature = 'bootstrap:roles';
protected $description = 'Set up roles.';

public function handle(SyncRolesAction $action): void
{
$this->line('bootstrapping roles...');
$action();
}
}
20 changes: 20 additions & 0 deletions app/Domain/Blog/Actions/StoreBlogAction.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
<?php

namespace App\Domain\Blog\Actions;

use Illuminate\Support\Str;
use App\Domain\Blog\Models\Blog;
use App\Http\Requests\Dashboard\Blogs\StoreBlogRequest;

class StoreBlogAction
{
public function __invoke(StoreBlogRequest $storeBlogRequest): Blog
{
return Blog::create([
'title' => $storeBlogRequest->input('title'),
'slug' => Str::slug($storeBlogRequest->input('slug')),
'content' => $storeBlogRequest->input('content'),
'is_draft' => $storeBlogRequest->input('draft'),
]);
}
}
11 changes: 11 additions & 0 deletions app/Domain/Blog/Policies/BlogPolicy.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<?php

namespace App\Domain\Blog\Policies;

use App\Domain\Iam\Models\User;
use App\Domain\Groups\Models\Group;
use App\Domain\Workspace\Enums\WorkspacePermissions;

class BlogPolicy
{
}
23 changes: 23 additions & 0 deletions app/Domain/Iam/Actions/SyncRolesAction.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<?php

namespace App\Domain\Iam\Actions;

use App\Domain\Iam\Models\Role;
use App\Domain\Iam\Models\User;

class SyncRolesAction
{
public function __invoke(): void
{
$roles = [
User::ROLE_ADMIN,
User::ROLE_AUTHOR,
];

foreach ($roles as $role) {
if (! Role::where('name', $role)->exists()) {
Role::create(['name' => $role]);
}
}
}
}
7 changes: 7 additions & 0 deletions app/Domain/Iam/Models/Role.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
<?php

namespace App\Domain\Iam\Models;

class Role extends \Codinglabs\Roles\Role
{
}
5 changes: 5 additions & 0 deletions app/Domain/Iam/Models/User.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

// use Illuminate\Contracts\Auth\MustVerifyEmail;
use App\Domain\Blog\Models\Blog;
use Codinglabs\Roles\HasRoles;
use Laravel\Sanctum\HasApiTokens;
use Illuminate\Notifications\Notifiable;
use Illuminate\Database\Eloquent\Relations\HasMany;
Expand All @@ -15,6 +16,7 @@ class User extends Authenticatable
use HasApiTokens;
use HasFactory;
use Notifiable;
use HasRoles;

protected $fillable = [
'name',
Expand All @@ -31,6 +33,9 @@ class User extends Authenticatable
'email_verified_at' => 'datetime',
];

const ROLE_ADMIN = 'admin';
const ROLE_AUTHOR = 'author';

public function blog(): HasMany
{
return $this->hasMany(Blog::class);
Expand Down
10 changes: 8 additions & 2 deletions app/Http/Controllers/Dashboard/Blogs/StoreBlogController.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,19 @@

namespace App\Http\Controllers\Dashboard\Blogs;

use App\Domain\Blog\Actions\StoreBlogAction;
use App\Http\Controllers\Controller;
use App\Http\Requests\Dashboard\Blogs\StoreBlogRequest;
use Illuminate\Http\RedirectResponse;

class StoreBlogController extends Controller
{
public function __invoke(): RedirectResponse
public function __invoke(StoreBlogRequest $request, StoreBlogAction $storeBlogAction): RedirectResponse
{
return redirect()->back()->with('success', 'stored!');
$blog = $storeBlogAction($request);

$drafted = (bool)$request->input('draft');

return redirect()->back()->with('success', $blog . ' has successfully been ' . $drafted ? 'drafted' : 'published' . '!');
}
}
40 changes: 40 additions & 0 deletions app/Http/Requests/Dashboard/Blogs/StoreBlogRequest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
<?php

namespace App\Http\Requests\Dashboard\Blogs;

use Illuminate\Validation\Rule;
use App\Domain\Blog\Models\Blog;
use Illuminate\Foundation\Http\FormRequest;

class StoreBlogRequest extends FormRequest
{
public function authorize(): bool
{
return true;
// return auth()->user()->can('create', Blog::class);
}

public function rules(): array
{
return [
'title' => [
'required',
'string',
Rule::unique(Blog::class, 'title'),
],
'slug' => [
'required',
'string',
Rule::unique(Blog::class, 'slug'),
],
'content' => [
'required',
'string',
],
'draft' => [
'nullable',
'boolean'
]
];
}
}
1 change: 1 addition & 0 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
"license": "MIT",
"require": {
"php": "^8.1",
"codinglabsau/laravel-roles": "^2.4",
"codinglabsau/php-styles": "dev-main",
"guzzlehttp/guzzle": "^7.2",
"inertiajs/inertia-laravel": "^0.6.8",
Expand Down
Loading

0 comments on commit ee66fb7

Please sign in to comment.