feat: swap over to spatie logger

This commit is contained in:
llama committed 2023-10-12 22:51:26 +11:00
1 parent d3864a69f1
commit 7d94630fd6
22 files changed
+485 -269

No files matched your search

-22
View File
@@ -1,22 +0,0 @@
<?php
namespace App\Enums;
use App\Traits\EnumOptions;
use App\Traits\EnumValues;
enum LogAction: string
{
use EnumValues;
use EnumOptions;
case CREATE = 'create';
case DELETE = 'delete';
case REQUEST = 'request';
case REJECT = 'reject';
case APPROVE = 'approve';
case SEND = 'send';
case UPDATE = 'update';
case ACCESS = 'access';
}
+7 -18
View File
@@ -2,9 +2,7 @@
namespace App\Http\Controllers\Api;
use App\Enums\LogAction;
use App\Http\Controllers\Controller;
use App\Models\Log;
use App\Models\Quote;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Http;
@@ -26,14 +24,9 @@ class WebHookController extends Controller
return;
}
Log::create([
'user_id' => auth()?->user()?->id ?? 1,
'loggable_type' => Quote::class,
'loggable_id' => null,
'action' => LogAction::SEND,
'content' => $quote,
'ip' => request()->ip(),
]);
activity()
->event('send')
->log("Manually sent quote: $quote");
$this->webHookSend($quote);
}
@@ -42,14 +35,10 @@ class WebHookController extends Controller
{
$quote = Quote::inRandomOrder()->first();
Log::create([
'user_id' => auth()?->user()?->id ?? 1,
'loggable_type' => Quote::class,
'loggable_id' => $quote->id,
'action' => LogAction::REQUEST,
'content' => 'Random quote requested',
'ip' => request()->ip(),
]);
activity()
->performedOn($quote)
->event('send')
->log("Requested quote: $quote->quote");
$this->webHookSend($quote->quote);
}
-35
View File
@@ -1,35 +0,0 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\MorphTo;
/**
* @mixin IdeHelperLog
*/
class Log extends Model
{
protected $fillable = [
'user_id',
'loggable_type',
'loggable_id',
'action',
'content',
'ip',
];
public function user(): BelongsTo
{
return $this->belongsTo(User::class);
}
/**
* Get the parent loggable model (user, quote or requested quote).
*/
public function loggable(): MorphTo
{
return $this->morphTo();
}
}
+14 -44
View File
@@ -2,67 +2,37 @@
namespace App\Models;
use App\Enums\LogAction;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\MorphOne;
use Illuminate\Database\Eloquent\SoftDeletes;
use Spatie\Activitylog\LogOptions;
use Spatie\Activitylog\Traits\LogsActivity;
/**
* @mixin IdeHelperQuote
*/
class Quote extends Model
{
use SoftDeletes;
public function request(): void
{
// Send the quote
// If success, add it to the transactions
Log::create([
'user_id' => auth()?->user()?->id,
'loggable_type' => self::class,
'loggable_id' => $this->id,
'action' => LogAction::REQUEST,
'content' => $this->quote,
'ip' => request()->ip(),
]);
}
use LogsActivity, SoftDeletes;
protected $fillable = [
'user_id',
'quote',
];
public function logs(): MorphOne
public function request(): void
{
return $this->morphOne(Log::class, 'loggable');
// Send the quote
// If success, add it to the transactions
activity()
->performedOn($this)
->event('send')
->log("Requested quote: $this->quote");
}
public static function boot(): void
public function getActivityLogOptions(): LogOptions
{
parent::boot();
self::created(function (Quote $model) {
Log::create([
'user_id' => auth()?->user()?->id,
'loggable_type' => self::class,
'loggable_id' => $model->id,
'action' => LogAction::CREATE,
'content' => $model->quote,
'ip' => request()->ip(),
]);
});
self::deleted(function (Quote $model) {
Log::create([
'user_id' => auth()?->user()?->id,
'loggable_type' => self::class,
'loggable_id' => $model->id,
'action' => LogAction::DELETE,
'content' => $model->quote,
'ip' => request()->ip(),
]);
});
return LogOptions::defaults()
->logOnly(['quote']);
}
}
+13 -25
View File
@@ -2,56 +2,44 @@
namespace App\Models;
use App\Enums\LogAction;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\MorphOne;
use Illuminate\Database\Eloquent\SoftDeletes;
use Spatie\Activitylog\Facades\LogBatch;
use Spatie\Activitylog\LogOptions;
use Spatie\Activitylog\Traits\LogsActivity;
/**
* @mixin IdeHelperRequestedQuote
*/
class RequestedQuote extends Model
{
use SoftDeletes;
use LogsActivity, SoftDeletes;
protected $fillable = [
'quote',
];
public function logs(): MorphOne
{
return $this->morphOne(Log::class, 'loggable');
}
public function approve(): void
{
Log::create([
'user_id' => auth()?->user()?->id,
'loggable_type' => self::class,
'loggable_id' => $this->id,
'action' => LogAction::APPROVE,
'content' => $this->quote,
'ip' => request()->ip(),
]);
LogBatch::startBatch();
Quote::create([
'quote' => $this->quote,
]);
$this->delete();
LogBatch::endBatch();
}
public function reject(): void
{
Log::create([
'user_id' => auth()?->user()?->id,
'loggable_type' => self::class,
'loggable_id' => $this->id,
'action' => LogAction::REJECT,
'content' => $this->quote,
'ip' => request()->ip(),
]);
$this->delete();
}
public function getActivityLogOptions(): LogOptions
{
return LogOptions::defaults()
->logOnly(['quote']);
}
}
+6 -28
View File
@@ -2,20 +2,18 @@
namespace App\Models;
use App\Enums\LogAction;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\Relations\MorphOne;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Spatie\Activitylog\LogOptions;
use Spatie\Activitylog\Traits\LogsActivity;
/**
* @mixin IdeHelperUser
*/
class User extends Authenticatable
{
use HasFactory, Notifiable;
use LogsActivity, HasFactory, Notifiable;
/**
* The model's default values for attributes.
@@ -64,34 +62,14 @@ class User extends Authenticatable
'password' => 'hashed',
];
public function logAction(): HasMany
{
return $this->hasMany(Log::class);
}
public function logs(): MorphOne
{
return $this->morphOne(Log::class, 'loggable');
}
public function getFullNameAttribute(): string
{
return "$this->firstname $this->lastname";
}
public static function boot(): void
public function getActivityLogOptions(): LogOptions
{
parent::boot();
self::created(function ($model) {
Log::create([
'user_id' => auth()?->user()?->id ?? 1,
'loggable_type' => self::class,
'loggable_id' => $model->id,
'action' => LogAction::CREATE,
'content' => $model->full_name,
'ip' => request()->ip(),
]);
});
return LogOptions::defaults()
->logExcept(['password']);
}
}
+5 -1
View File
@@ -3,6 +3,7 @@
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Spatie\Activitylog\Models\Activity;
class AppServiceProvider extends ServiceProvider
{
@@ -15,6 +16,7 @@ class AppServiceProvider extends ServiceProvider
$this->app->register(\Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider::class);
}
// This is so we can access alpine without livewire on the page.
\Livewire\Livewire::forceAssetInjection();
}
@@ -23,6 +25,8 @@ class AppServiceProvider extends ServiceProvider
*/
public function boot(): void
{
//
Activity::saving(function (Activity $activity) {
$activity->properties = $activity->properties->put('ip', request()->ip());
});
}
}