diff --git a/app/Http/Controllers/TaskController.php b/app/Http/Controllers/TaskController.php index c0028ce..58c9f14 100644 --- a/app/Http/Controllers/TaskController.php +++ b/app/Http/Controllers/TaskController.php @@ -2,9 +2,77 @@ namespace App\Http\Controllers; +use App\Models\Category; +use App\Models\Task; use Illuminate\Http\Request; +use Illuminate\Support\Facades\Auth; class TaskController extends Controller { - // + public function index() { + $task = Task::latest('updated_at')->Paginate(20); + return view('task.index', [ + 'tasks' => $task + ]); + } + + public function show(Task $task) { + return view('task.show', [ + 'task' => $task + ]); + } + + public function create() { + $categories = Category::all(); + return view('task.create', [ + 'categories' => $categories + ]); + } + + public function store(Task $task) { + $validatedAtts = request()->validate([ + 'name' => ['required'], + 'description' => ['required'], + 'category_id' => ['required'], + 'location' => ['required'], + 'time_estimate' => ['required'], + ]); + + $validatedAtts['user_id'] = Auth::id(); + + $task = Task::create( + $validatedAtts + ); + + return redirect()->route('task.create')->with('success', 'Task created successfully!'); + } + + public function edit(Task $task) { + $categories = Category::all(); + return view('task.edit', [ + 'task' => $task, + 'categories' => $categories + ]); + } + + public function update(Task $task) { + $validatedAtts = request()->validate([ + 'name' => ['required'], + 'description' => ['required'], + 'category_id' => ['required'], + 'location' => ['required'], + 'time_estimate' => ['required'], + ]); + + $task->update($validatedAtts); + + return redirect('/task/'.$task->id); + + } + public function destroy(Task $task) + { + $task->delete(); + return redirect()->route('task.index')->with('success', 'Task deleted successfully'); + } + } diff --git a/app/Models/Task.php b/app/Models/Task.php index 6f6ac12..b881c3a 100644 --- a/app/Models/Task.php +++ b/app/Models/Task.php @@ -4,6 +4,7 @@ namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; +use Illuminate\Support\Facades\Auth; class Task extends Model { @@ -13,6 +14,7 @@ class Task extends Model 'completed' => false, // Set default value for completed ]; + public function user() { return $this->belongsTo(User::class); } diff --git a/database/migrations/2025_03_05_223432_create_tasks_table.php b/database/migrations/2025_03_05_223432_create_tasks_table.php index ec7a934..a8865a7 100644 --- a/database/migrations/2025_03_05_223432_create_tasks_table.php +++ b/database/migrations/2025_03_05_223432_create_tasks_table.php @@ -15,8 +15,8 @@ return new class extends Migration { Schema::create('tasks', function (Blueprint $table) { $table->id(); - $table->foreignIdFor(User::class); - $table->foreignIdFor(Category::class); + $table->foreignIdFor(User::class)->constrained()->cascadeOnDelete(); + $table->foreignIdFor(Category::class)->constrained()->cascadeOnDelete(); $table->string('name'); $table->longText('description'); $table->string('location'); diff --git a/resources/views/task/index.blade.php b/resources/views/task/index.blade.php index 03b4ee1..ba3d872 100644 --- a/resources/views/task/index.blade.php +++ b/resources/views/task/index.blade.php @@ -1,5 +1,11 @@ Task Page + + @if (session('success')) +
+ {{ session('success') }} +
+ @endif @foreach ($tasks as $task)
diff --git a/resources/views/task/show.blade.php b/resources/views/task/show.blade.php index 4dfd009..159d273 100644 --- a/resources/views/task/show.blade.php +++ b/resources/views/task/show.blade.php @@ -13,5 +13,12 @@
Edit +
+ @csrf + @method('DELETE') + + Delete + +
\ No newline at end of file diff --git a/routes/web.php b/routes/web.php index 2f09461..d837ecb 100644 --- a/routes/web.php +++ b/routes/web.php @@ -1,5 +1,6 @@ Paginate(20); - return view('task.index', [ - 'tasks' => $task - ]); -}); +Route::get('/', [TaskController::class, 'index']); +Route::get('/task', [TaskController::class, 'index'])->name('task.index'); +Route::get('/task/create', [TaskController::class, 'create']); +Route::get('/task/{task}', [TaskController::class, 'show'])->name('task.show'); +Route::post('/task/create', [TaskController::class, 'store'])->name('task.create'); +Route::delete('/task/{task}', [TaskController::class, 'destroy']); +Route::get('/task/{task}/edit', [TaskController::class, 'edit']); - - -Route::get('/task', function () { - $task = Task::latest('updated_at')->Paginate(20); - return view('task.index', [ - 'tasks' => $task - ]); -}); - - -Route::get('/task/create', function () { - $categories = Category::all(); - return view('task.create', [ - 'categories' => $categories - ]); -}); - -Route::post('/task/create', function () { - //dd(Auth::id()); - $validatedAtts = request()->validate([ - 'name' => ['required'], - 'description' => ['required'], - 'category_id' => ['required'], - 'location' => ['required'], - 'time_estimate' => ['required'], - ]); - - $validatedAtts['user_id'] = Auth::id(); - - //dd($validatedAtts); - - $task = Task::create( - $validatedAtts - ); - - return redirect()->route('task.create')->with('success', 'Task created successfully!'); -})->name('task.create'); - -Route::get('/task/{id}', function ($id) { - $task = Task::find($id); - return view('task.show', [ - 'task' => $task - ]); -}); - -Route::get('/task/{id}/edit', function ($id) { - $task = Task::find($id); - $categories = Category::all(); - return view('task.edit', [ - 'task' => $task, - 'categories' => $categories - ]); -}); - -Route::patch('/task/{id}', function ($id) { - $task = Task::find($id); - $validatedAtts = request()->validate([ - 'name' => ['required'], - 'description' => ['required'], - 'category_id' => ['required'], - 'location' => ['required'], - 'time_estimate' => ['required'], - ]); - //dd($task); - $task->update($validatedAtts); - - return redirect('/task/'.$task->id); - - -}); +Route::patch('/task/{task}', [TaskController::class, 'update']);