From e3bb7cb69fb38e11c9d1b300f89cfd26c53eeb90 Mon Sep 17 00:00:00 2001 From: Nicholas Ciechanowski Date: Tue, 10 Oct 2023 23:48:05 +1100 Subject: [PATCH] feat: basic log page --- app/Models/Log.php | 16 +++++ app/Models/Quote.php | 13 +++- app/Models/RequestedQuote.php | 10 ++- app/Models/User.php | 13 +++- resources/views/admin/logs.blade.php | 9 +++ resources/views/components/sidebar.blade.php | 7 +- .../views/livewire/pages/admin/logs.blade.php | 67 +++++++++++++++++++ .../views/livewire/pages/admin/send.blade.php | 2 +- .../views/livewire/pages/auth/login.blade.php | 2 +- .../pages/auth/reset-password.blade.php | 2 +- .../profile/update-password-form.blade.php | 2 +- routes/web.php | 4 ++ 12 files changed, 131 insertions(+), 16 deletions(-) create mode 100644 resources/views/admin/logs.blade.php create mode 100644 resources/views/livewire/pages/admin/logs.blade.php diff --git a/app/Models/Log.php b/app/Models/Log.php index e0bfb0c..f359360 100644 --- a/app/Models/Log.php +++ b/app/Models/Log.php @@ -3,6 +3,7 @@ namespace App\Models; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\Relations\BelongsTo; /** * @mixin IdeHelperLog @@ -15,4 +16,19 @@ class Log extends Model 'requested_quote_id', 'content', ]; + + public function user(): BelongsTo + { + return $this->belongsTo(User::class); + } + + public function quote(): BelongsTo + { + return $this->belongsTo(Quote::class); + } + + public function requestedQuote(): BelongsTo + { + return $this->belongsTo(RequestedQuote::class); + } } diff --git a/app/Models/Quote.php b/app/Models/Quote.php index 51d041e..57649fb 100644 --- a/app/Models/Quote.php +++ b/app/Models/Quote.php @@ -3,6 +3,7 @@ namespace App\Models; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\SoftDeletes; /** @@ -20,13 +21,19 @@ class Quote extends Model Log::create([ 'user_id' => auth()?->user()?->id, 'quote_id' => $this->id, - 'content' => 'Quote requested.' + 'content' => 'Quote requested.', ]); } + protected $fillable = [ 'quote', ]; + public function logs(): hasMany + { + return $this->hasMany(Log::class); + } + public static function boot(): void { parent::boot(); @@ -35,7 +42,7 @@ class Quote extends Model Log::create([ 'user_id' => auth()?->user()?->id, 'quote_id' => $model->id, - 'content' => 'Quote created.' + 'content' => 'Quote created.', ]); }); @@ -43,7 +50,7 @@ class Quote extends Model Log::create([ 'user_id' => auth()?->user()?->id, 'quote_id' => $model->id, - 'content' => 'Quote deleted.' + 'content' => 'Quote deleted.', ]); }); } diff --git a/app/Models/RequestedQuote.php b/app/Models/RequestedQuote.php index 9b758c0..8ab0190 100644 --- a/app/Models/RequestedQuote.php +++ b/app/Models/RequestedQuote.php @@ -3,6 +3,7 @@ namespace App\Models; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\SoftDeletes; /** @@ -17,12 +18,17 @@ class RequestedQuote extends Model 'user_id', ]; + public function logs(): hasMany + { + return $this->hasMany(Log::class); + } + public function approve(): void { Log::create([ 'user_id' => auth()?->user()?->id, 'requested_quote_id' => $this->id, - 'content' => 'Quote approved.' + 'content' => 'Quote approved.', ]); Quote::create([ @@ -37,7 +43,7 @@ class RequestedQuote extends Model Log::create([ 'user_id' => auth()?->user()?->id, 'requested_quote_id' => $this->id, - 'content' => 'Quote rejected.' + 'content' => 'Quote rejected.', ]); $this->delete(); diff --git a/app/Models/User.php b/app/Models/User.php index 7af6c1e..7d2f868 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -3,6 +3,7 @@ namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; +use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; use Laravel\Sanctum\HasApiTokens; @@ -61,6 +62,16 @@ class User extends Authenticatable 'password' => 'hashed', ]; + public function logs(): hasMany + { + return $this->hasMany(Log::class); + } + + public function fullName(): string + { + return "{$this->firstname} {$this->lastname}"; + } + public static function boot(): void { parent::boot(); @@ -71,7 +82,7 @@ class User extends Authenticatable self::created(function ($model) { Log::create([ 'user_id' => $model->id, - 'content' => 'User created.' + 'content' => 'User created.', ]); }); } diff --git a/resources/views/admin/logs.blade.php b/resources/views/admin/logs.blade.php new file mode 100644 index 0000000..181274e --- /dev/null +++ b/resources/views/admin/logs.blade.php @@ -0,0 +1,9 @@ + +
+
+
+ +
+
+
+
diff --git a/resources/views/components/sidebar.blade.php b/resources/views/components/sidebar.blade.php index 9f0f255..d67a92a 100644 --- a/resources/views/components/sidebar.blade.php +++ b/resources/views/components/sidebar.blade.php @@ -38,12 +38,7 @@ Send Quote
  • - {{-- TODO: fill with SVG icons to make it pretty --}} - {{-- Second Page--}} -
  • -
  • - {{-- TODO: fill with SVG icons to make it pretty --}} - {{-- Third Page--}} + Logs
  • diff --git a/resources/views/livewire/pages/admin/logs.blade.php b/resources/views/livewire/pages/admin/logs.blade.php new file mode 100644 index 0000000..557d4d2 --- /dev/null +++ b/resources/views/livewire/pages/admin/logs.blade.php @@ -0,0 +1,67 @@ +getLogs(); + } + + public function getLogs(): void + { + // TODO: look into pagination for this. + $this->logs = Log::with(['user', 'quote', 'requestedQuote'])->get()->sortByDesc('created_at'); + } +}; ?> + +
    +
    + + + + + + + + + + @foreach ($logs as $log) + + + + + + @endforeach + +
    + User + + Logs + + Type +
    + {{ $log?->user->fullName() ?? 'N/A' }} + + {{ $log->content }} + + @if (!empty($log->quote_id)) + Quote - {{ $log->quote_id }} + @elseif (!empty($log->requested_quote_id)) + Requsted Quote - ID: {{ $log->requested_quote_id }} + @else + N/A + @endif +
    +
    +
    + diff --git a/resources/views/livewire/pages/admin/send.blade.php b/resources/views/livewire/pages/admin/send.blade.php index 7decace..7b8f526 100644 --- a/resources/views/livewire/pages/admin/send.blade.php +++ b/resources/views/livewire/pages/admin/send.blade.php @@ -20,7 +20,7 @@ new #[Layout('layouts.app')] class extends Component Log::create([ 'user_id' => auth()?->user()?->id, - 'content' => "Quote sent. {$validated['quote']}" + 'content' => "Quote sent. {$validated['quote']}", ]); $this->quote = ''; diff --git a/resources/views/livewire/pages/auth/login.blade.php b/resources/views/livewire/pages/auth/login.blade.php index be02104..b9851f8 100644 --- a/resources/views/livewire/pages/auth/login.blade.php +++ b/resources/views/livewire/pages/auth/login.blade.php @@ -42,7 +42,7 @@ new #[Layout('layouts.guest')] class extends Component Log::create([ 'user_id' => auth()?->user()?->id, - 'content' => "Quote sent. {$quote}" + 'content' => "Quote sent. {$quote}", ]); $this->redirect( diff --git a/resources/views/livewire/pages/auth/reset-password.blade.php b/resources/views/livewire/pages/auth/reset-password.blade.php index 3f397d2..0d2b932 100644 --- a/resources/views/livewire/pages/auth/reset-password.blade.php +++ b/resources/views/livewire/pages/auth/reset-password.blade.php @@ -61,7 +61,7 @@ new #[Layout('layouts.guest')] class extends Component Log::create([ 'user_id' => auth()?->user()?->id, - 'content' => "Quote sent. {$quote}" + 'content' => "Quote sent. {$quote}", ]); $this->redirectRoute('login', navigate: true); diff --git a/resources/views/livewire/profile/update-password-form.blade.php b/resources/views/livewire/profile/update-password-form.blade.php index 04eee07..90b9a68 100644 --- a/resources/views/livewire/profile/update-password-form.blade.php +++ b/resources/views/livewire/profile/update-password-form.blade.php @@ -31,7 +31,7 @@ new class extends Component Log::create([ 'user_id' => auth()?->user()?->id, - 'content' => "Quote sent. {$quote}" + 'content' => "Quote sent. {$quote}", ]); $this->reset('current_password', 'password', 'password_confirmation'); diff --git a/routes/web.php b/routes/web.php index 6825f2c..81f11f7 100644 --- a/routes/web.php +++ b/routes/web.php @@ -29,6 +29,10 @@ Route::view('send', 'admin.send') ->middleware(['auth']) ->name('admin.send'); +Route::view('/admin/logs', 'admin.logs') + ->middleware(['auth']) + ->name('admin.logs'); + Route::middleware('guest')->group(function () { Volt::route('login', 'pages.auth.login') ->name('login');