feat: Add Dynamics to main navigation

This commit is contained in:
Daan Meijer 2026-06-15 01:03:38 +02:00
parent c31b4612df
commit 16a6962149
27 changed files with 41 additions and 44 deletions

0
.ai/mcp/mcp.json Normal file
View File

View File

@ -5,7 +5,6 @@ namespace App\Events;
use App\Models\Message;
use Illuminate\Broadcasting\Channel;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Broadcasting\PresenceChannel;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
use Illuminate\Foundation\Events\Dispatchable;

View File

@ -5,9 +5,6 @@ namespace App\Http\Requests;
use Illuminate\Contracts\Validation\ValidationRule;
use Illuminate\Foundation\Http\FormRequest;
use App\Models\Dynamic;
class StoreLedgerRequest extends FormRequest
{
/**
@ -23,7 +20,7 @@ class StoreLedgerRequest extends FormRequest
/**
* Get the validation rules that apply to the request.
*
* @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array|string>
* @return array<string, ValidationRule|array|string>
*/
public function rules(): array
{

View File

@ -5,9 +5,6 @@ namespace App\Http\Requests;
use Illuminate\Contracts\Validation\ValidationRule;
use Illuminate\Foundation\Http\FormRequest;
use App\Models\Chat;
class StoreMessageRequest extends FormRequest
{
/**
@ -23,7 +20,7 @@ class StoreMessageRequest extends FormRequest
/**
* Get the validation rules that apply to the request.
*
* @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array|string>
* @return array<string, ValidationRule|array|string>
*/
public function rules(): array
{

View File

@ -5,9 +5,6 @@ namespace App\Http\Requests;
use Illuminate\Contracts\Validation\ValidationRule;
use Illuminate\Foundation\Http\FormRequest;
use App\Models\Ledger;
class StoreMutationRequest extends FormRequest
{
/**
@ -23,7 +20,7 @@ class StoreMutationRequest extends FormRequest
/**
* Get the validation rules that apply to the request.
*
* @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array|string>
* @return array<string, ValidationRule|array|string>
*/
public function rules(): array
{

View File

@ -2,6 +2,7 @@
namespace App\Models;
use Database\Factories\ChatFactory;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasMany;
@ -9,7 +10,7 @@ use Illuminate\Database\Eloquent\Relations\MorphTo;
class Chat extends Model
{
/** @use HasFactory<\Database\Factories\ChatFactory> */
/** @use HasFactory<ChatFactory> */
use HasFactory;
public function chatable(): MorphTo

View File

@ -2,16 +2,16 @@
namespace App\Models;
use Database\Factories\DynamicFactory;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\Relations\MorphOne;
class Dynamic extends Model
{
/** @use HasFactory<\Database\Factories\DynamicFactory> */
/** @use HasFactory<DynamicFactory> */
use HasFactory;
protected $fillable = [

View File

@ -2,15 +2,15 @@
namespace App\Models;
use Database\Factories\LedgerFactory;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;
class Ledger extends Model
{
/** @use HasFactory<\Database\Factories\LedgerFactory> */
/** @use HasFactory<LedgerFactory> */
use HasFactory;
protected $fillable = [

View File

@ -2,13 +2,14 @@
namespace App\Models;
use Database\Factories\MessageFactory;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
class Message extends Model
{
/** @use HasFactory<\Database\Factories\MessageFactory> */
/** @use HasFactory<MessageFactory> */
use HasFactory;
protected $fillable = [

View File

@ -2,15 +2,15 @@
namespace App\Models;
use Database\Factories\MutationFactory;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\MorphOne;
class Mutation extends Model
{
/** @use HasFactory<\Database\Factories\MutationFactory> */
/** @use HasFactory<MutationFactory> */
use HasFactory;
protected $fillable = [

View File

@ -3,14 +3,10 @@
namespace App\Models;
// use Illuminate\Contracts\Auth\MustVerifyEmail;
use App\Models\Dynamic;
use App\Models\Mutation;
use Database\Factories\UserFactory;
use Illuminate\Database\Eloquent\Attributes\Fillable;
use Illuminate\Database\Eloquent\Attributes\Hidden;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Illuminate\Support\Carbon;

View File

@ -4,7 +4,6 @@ namespace App\Policies;
use App\Models\Dynamic;
use App\Models\User;
use Illuminate\Auth\Access\Response;
class DynamicPolicy
{

View File

@ -1,7 +1,11 @@
<?php
use App\Providers\AppServiceProvider;
use App\Providers\AuthServiceProvider;
use App\Providers\FortifyServiceProvider;
return [
App\Providers\AppServiceProvider::class,
App\Providers\AuthServiceProvider::class,
App\Providers\FortifyServiceProvider::class,
AppServiceProvider::class,
AuthServiceProvider::class,
FortifyServiceProvider::class,
];

View File

@ -1,6 +1,6 @@
<script setup lang="ts">
import { Link } from '@inertiajs/vue3';
import { BookOpen, FolderGit2, LayoutGrid } from '@lucide/vue';
import { BookOpen, FolderGit2, LayoutGrid, Users } from '@lucide/vue';
import AppLogo from '@/components/AppLogo.vue';
import NavFooter from '@/components/NavFooter.vue';
import NavMain from '@/components/NavMain.vue';
@ -15,6 +15,7 @@ import {
SidebarMenuItem,
} from '@/components/ui/sidebar';
import { dashboard } from '@/routes';
import { index as dynamics } from '@/routes/dynamics';
import type { NavItem } from '@/types';
const mainNavItems: NavItem[] = [
@ -23,6 +24,11 @@ const mainNavItems: NavItem[] = [
href: dashboard(),
icon: LayoutGrid,
},
{
title: 'Dynamics',
href: dynamics(),
icon: Users,
},
];
const footerNavItems: NavItem[] = [

View File

@ -1,9 +1,9 @@
<?php
use App\Http\Controllers\MessageController;
use App\Http\Controllers\MutationController;
use App\Http\Controllers\DynamicController;
use App\Http\Controllers\LedgerController;
use App\Http\Controllers\MessageController;
use App\Http\Controllers\MutationController;
use Illuminate\Support\Facades\Route;
Route::inertia('/', 'Welcome')->name('home');

View File

@ -74,4 +74,4 @@ test('users are rate limited', function () {
]);
$response->assertTooManyRequests();
});
});

View File

@ -98,4 +98,4 @@ test('already verified user visiting verification link is redirected without fir
Event::assertNotDispatched(Verified::class);
expect($user->fresh()->hasVerifiedEmail())->toBeTrue();
});
});

View File

@ -19,4 +19,4 @@ test('password confirmation requires authentication', function () {
$response = $this->get(route('password.confirm'));
$response->assertRedirect(route('login'));
});
});

View File

@ -75,4 +75,4 @@ test('password cannot be reset with invalid token', function () {
]);
$response->assertSessionHasErrors('email');
});
});

View File

@ -22,4 +22,4 @@ test('new users can register', function () {
$this->assertAuthenticated();
$response->assertRedirect(route('dashboard', absolute: false));
});
});

View File

@ -32,4 +32,4 @@ test('two factor challenge can be rendered', function () {
->assertInertia(fn (Assert $page) => $page
->component('auth/TwoFactorChallenge'),
);
});
});

View File

@ -31,4 +31,4 @@ test('does not send verification notification if email is verified', function ()
->assertRedirect(route('dashboard', absolute: false));
Notification::assertNothingSent();
});
});

View File

@ -13,4 +13,4 @@ test('authenticated users can visit the dashboard', function () {
$response = $this->get(route('dashboard'));
$response->assertOk();
});
});

View File

@ -4,4 +4,4 @@ test('returns a successful response', function () {
$response = $this->get(route('home'));
$response->assertOk();
});
});

View File

@ -82,4 +82,4 @@ test('correct password must be provided to delete account', function () {
->assertRedirect(route('profile.edit'));
expect($user->fresh())->not->toBeNull();
});
});

View File

@ -101,4 +101,4 @@ test('correct password must be provided to update password', function () {
$response
->assertSessionHasErrors('current_password')
->assertRedirect(route('security.edit'));
});
});

View File

@ -2,4 +2,4 @@
test('that true is true', function () {
expect(true)->toBeTrue();
});
});