Complete all stats

This commit is contained in:
Thuan Bui
2025-04-04 11:57:49 +09:00
parent fcea780b69
commit c7bf3ea95d
6 changed files with 72 additions and 4 deletions
+5 -2
View File
@@ -12,7 +12,7 @@ class ProjectController extends Controller
{
// TASK: Currently this statement fails. Fix the underlying issue.
Project::create([
'name' => $request->name
'name' => $request->name,
]);
return redirect('/')->with('success', 'Project created');
@@ -26,6 +26,9 @@ class ProjectController extends Controller
// where name = $request->old_name
// Insert Eloquent statement below
Project::where('name', $request->old_name)
->update(['name' => $request->new_name]);
return redirect('/')->with('success', 'Projects updated');
}
@@ -35,7 +38,7 @@ class ProjectController extends Controller
Project::destroy($projectId);
// TASK: change this Eloquent statement to include the soft-deletes records
$projects = Project::all();
$projects = Project::withTrashed()->get();
return view('projects.index', compact('projects'));
}
+8 -2
View File
@@ -45,7 +45,13 @@ class UserController extends Controller
{
// TASK: find a user by $name and update it with $email
// if not found, create a user with $name, $email and random password
$user = NULL; // updated or created user
$user = User::updateOrCreate(
['name' => $name],
[
'email' => $email,
'password' => Hash::make(Str::random(12)),
]
);
return view('users.show', compact('user'));
}
@@ -57,7 +63,7 @@ class UserController extends Controller
// $request->users is an array of IDs, ex. [1, 2, 3]
// Insert Eloquent statement here
$users = User::whereIn('id', $request->users)->delete();
return redirect('/')->with('success', 'Users deleted');
}
+1
View File
@@ -9,4 +9,5 @@ use Illuminate\Database\Eloquent\SoftDeletes;
class Project extends Model
{
use HasFactory, SoftDeletes;
protected $fillable = ['name'];
}
+5
View File
@@ -41,4 +41,9 @@ class User extends Authenticatable
protected $casts = [
'email_verified_at' => 'datetime',
];
public function scopeActive($query)
{
return $query->whereNotNull('email_verified_at');
}
}
+50
View File
@@ -0,0 +1,50 @@
<?php
namespace App\Observers;
use App\Models\Project;
use App\Models\Stat;
class ProjectObserver
{
/**
* Handle the Project "created" event.
*/
public function creating(Project $project): void
{
Stat::first()->increment('projects_count');
}
/**
* Handle the Project "updated" event.
*/
public function updated(Project $project): void
{
//
}
/**
* Handle the Project "deleted" event.
*/
public function deleted(Project $project): void
{
//
}
/**
* Handle the Project "restored" event.
*/
public function restored(Project $project): void
{
//
}
/**
* Handle the Project "force deleted" event.
*/
public function forceDeleted(Project $project): void
{
//
}
}
+3
View File
@@ -2,6 +2,8 @@
namespace App\Providers;
use App\Models\Project;
use App\Observers\ProjectObserver;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
@@ -24,5 +26,6 @@ class AppServiceProvider extends ServiceProvider
public function boot()
{
//
Project::observe(ProjectObserver::class);
}
}