diff --git a/app/Http/Controllers/AlertController.php b/app/Http/Controllers/AlertController.php new file mode 100644 index 0000000..50df2cc --- /dev/null +++ b/app/Http/Controllers/AlertController.php @@ -0,0 +1,35 @@ +user()->alerts()->whereNull('seen_at'); + + $alerts = $alerstQuery->get(); + + $alerstQuery->update([ + 'seen_at' => now() + ]); + + return response()->json($this->format($alerts)); + } + + /** + * Format + */ + public function format($alerts) + { + return $alerts->map(fn ($alert) => [ + 'name' => $alert->name, + 'value' => $alert->value, + ]); + } +} diff --git a/app/Models/Alert.php b/app/Models/Alert.php new file mode 100644 index 0000000..8e75be9 --- /dev/null +++ b/app/Models/Alert.php @@ -0,0 +1,27 @@ + 'datetime' + ]; + + /** + * User + */ + public function user(): BelongsTo + { + return $this->belongsTo(User::class); + } +} diff --git a/app/Models/Order/Loan/LoanOrder.php b/app/Models/Order/Loan/LoanOrder.php index 65db641..fe6c892 100644 --- a/app/Models/Order/Loan/LoanOrder.php +++ b/app/Models/Order/Loan/LoanOrder.php @@ -196,5 +196,14 @@ class LoanOrder extends Model static::creating(LoanOrderRepo::creating()); static::created(LoanOrderRepo::created()); + static::updated(function (LoanOrder $model) { + info($model->notes); + if ($model->notes && $model->wasChanged('notes')) { + auth()->user()->alerts()->create([ + 'name' => 'Duýdyryş', + 'value' => $model->notes, + ]); + } + }); } } diff --git a/app/Models/User.php b/app/Models/User.php index 6b6e53e..b7a72f9 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -97,6 +97,14 @@ class User extends Authenticatable return $this->hasMany(CardOrder::class); } + /** + * Alerts + */ + public function alerts(): HasMany + { + return $this->hasMany(Alert::class); + } + /** * Check if user has role. */ diff --git a/database/migrations/2024_11_26_004858_create_app_alerts_table.php b/database/migrations/2024_11_26_004858_create_app_alerts_table.php new file mode 100644 index 0000000..843333e --- /dev/null +++ b/database/migrations/2024_11_26_004858_create_app_alerts_table.php @@ -0,0 +1,34 @@ +id(); + $table->foreignId('user_id')->constrained()->cascadeOnDelete(); + + $table->text('name'); + $table->text('value'); + + $table->timestamp('seen_at')->nullable(); + + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('alerts'); + } +}; diff --git a/routes/api.php b/routes/api.php index c7a345d..30a05b5 100644 --- a/routes/api.php +++ b/routes/api.php @@ -1,5 +1,6 @@ group(function () { Route::post('loan-order/{loanOrder}', [LoanOrderController::class, 'update']); Route::delete('loan-order/{loanOrder}', [LoanOrderController::class, 'destroy']); - // Route::get('alerts', []); + // Alerts... + Route::get('alerts', [AlertController::class, 'index']); });