Skip to content

Commit d1c6585

Browse files
committed
Finish project
1 parent 85ea9b2 commit d1c6585

29 files changed

+1529
-47
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
<?php
2+
3+
namespace App\Http\Controllers;
4+
5+
use App\Http\Resources\TaskResource;
6+
use App\Models\Task;
7+
use Illuminate\Http\Request;
8+
9+
class DashboardController extends Controller
10+
{
11+
public function index()
12+
{
13+
$user = auth()->user();
14+
$totalPendingTasks = Task::query()
15+
->where('status', 'pending')
16+
->count();
17+
$myPendingTasks = Task::query()
18+
->where('status', 'pending')
19+
->where('assigned_user_id', $user->id)
20+
->count();
21+
22+
23+
$totalProgressTasks = Task::query()
24+
->where('status', 'in_progress')
25+
->count();
26+
$myProgressTasks = Task::query()
27+
->where('status', 'in_progress')
28+
->where('assigned_user_id', $user->id)
29+
->count();
30+
31+
32+
$totalCompletedTasks = Task::query()
33+
->where('status', 'completed')
34+
->count();
35+
$myCompletedTasks = Task::query()
36+
->where('status', 'completed')
37+
->where('assigned_user_id', $user->id)
38+
->count();
39+
40+
$activeTasks = Task::query()
41+
->whereIn('status', ['pending', 'in_progress'])
42+
->where('assigned_user_id', $user->id)
43+
->limit(10)
44+
->get();
45+
$activeTasks = TaskResource::collection($activeTasks);
46+
return inertia(
47+
'Dashboard',
48+
compact(
49+
'totalPendingTasks',
50+
'myPendingTasks',
51+
'totalProgressTasks',
52+
'myProgressTasks',
53+
'totalCompletedTasks',
54+
'myCompletedTasks',
55+
'activeTasks'
56+
)
57+
);
58+
}
59+
}

app/Http/Controllers/ProjectController.php

+1
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ public function show(Project $project)
9292
'project' => new ProjectResource($project),
9393
"tasks" => TaskResource::collection($tasks),
9494
'queryParams' => request()->query() ?: null,
95+
'success' => session('success'),
9596
]);
9697
}
9798

app/Http/Controllers/TaskController.php

+84-6
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,17 @@
22

33
namespace App\Http\Controllers;
44

5+
use App\Http\Resources\ProjectResource;
56
use App\Http\Resources\TaskResource;
7+
use App\Http\Resources\UserResource;
8+
use App\Models\Project;
69
use App\Models\Task;
710
use App\Http\Requests\StoreTaskRequest;
811
use App\Http\Requests\UpdateTaskRequest;
12+
use App\Models\User;
13+
use Illuminate\Support\Facades\Auth;
14+
use Illuminate\Support\Facades\Storage;
15+
use Illuminate\Support\Str;
916

1017
class TaskController extends Controller
1118
{
@@ -33,6 +40,7 @@ public function index()
3340
return inertia("Task/Index", [
3441
"tasks" => TaskResource::collection($tasks),
3542
'queryParams' => request()->query() ?: null,
43+
'success' => session('success'),
3644
]);
3745
}
3846

@@ -41,46 +49,116 @@ public function index()
4149
*/
4250
public function create()
4351
{
44-
//
52+
$projects = Project::query()->orderBy('name', 'asc')->get();
53+
$users = User::query()->orderBy('name', 'asc')->get();
54+
55+
return inertia("Task/Create", [
56+
'projects' => ProjectResource::collection($projects),
57+
'users' => UserResource::collection($users),
58+
]);
4559
}
4660

4761
/**
4862
* Store a newly created resource in storage.
4963
*/
5064
public function store(StoreTaskRequest $request)
5165
{
52-
//
66+
$data = $request->validated();
67+
/** @var $image \Illuminate\Http\UploadedFile */
68+
$image = $data['image'] ?? null;
69+
$data['created_by'] = Auth::id();
70+
$data['updated_by'] = Auth::id();
71+
if ($image) {
72+
$data['image_path'] = $image->store('task/' . Str::random(), 'public');
73+
}
74+
Task::create($data);
75+
76+
return to_route('task.index')
77+
->with('success', 'Task was created');
5378
}
5479

5580
/**
5681
* Display the specified resource.
5782
*/
5883
public function show(Task $task)
5984
{
60-
//
85+
return inertia('Task/Show', [
86+
'task' => new TaskResource($task),
87+
]);
6188
}
6289

6390
/**
6491
* Show the form for editing the specified resource.
6592
*/
6693
public function edit(Task $task)
6794
{
68-
//
95+
$projects = Project::query()->orderBy('name', 'asc')->get();
96+
$users = User::query()->orderBy('name', 'asc')->get();
97+
98+
return inertia("Task/Edit", [
99+
'task' => new TaskResource($task),
100+
'projects' => ProjectResource::collection($projects),
101+
'users' => UserResource::collection($users),
102+
]);
69103
}
70104

71105
/**
72106
* Update the specified resource in storage.
73107
*/
74108
public function update(UpdateTaskRequest $request, Task $task)
75109
{
76-
//
110+
$data = $request->validated();
111+
$image = $data['image'] ?? null;
112+
$data['updated_by'] = Auth::id();
113+
if ($image) {
114+
if ($task->image_path) {
115+
Storage::disk('public')->deleteDirectory(dirname($task->image_path));
116+
}
117+
$data['image_path'] = $image->store('task/' . Str::random(), 'public');
118+
}
119+
$task->update($data);
120+
121+
return to_route('task.index')
122+
->with('success', "Task \"$task->name\" was updated");
77123
}
78124

79125
/**
80126
* Remove the specified resource from storage.
81127
*/
82128
public function destroy(Task $task)
83129
{
84-
//
130+
$name = $task->name;
131+
$task->delete();
132+
if ($task->image_path) {
133+
Storage::disk('public')->deleteDirectory(dirname($task->image_path));
134+
}
135+
return to_route('task.index')
136+
->with('success', "Task \"$name\" was deleted");
137+
}
138+
139+
public function myTasks()
140+
{
141+
$user = auth()->user();
142+
$query = Task::query()->where('assigned_user_id', $user->id);
143+
144+
$sortField = request("sort_field", 'created_at');
145+
$sortDirection = request("sort_direction", "desc");
146+
147+
if (request("name")) {
148+
$query->where("name", "like", "%" . request("name") . "%");
149+
}
150+
if (request("status")) {
151+
$query->where("status", request("status"));
152+
}
153+
154+
$tasks = $query->orderBy($sortField, $sortDirection)
155+
->paginate(10)
156+
->onEachSide(1);
157+
158+
return inertia("Task/Index", [
159+
"tasks" => TaskResource::collection($tasks),
160+
'queryParams' => request()->query() ?: null,
161+
'success' => session('success'),
162+
]);
85163
}
86164
}

app/Http/Controllers/UserController.php

+48-6
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
namespace App\Http\Controllers;
44

5+
use App\Http\Resources\UserCrudResource;
56
use App\Models\User;
67
use App\Http\Requests\StoreUserRequest;
78
use App\Http\Requests\UpdateUserRequest;
@@ -13,23 +14,49 @@ class UserController extends Controller
1314
*/
1415
public function index()
1516
{
16-
//
17+
$query = User::query();
18+
19+
$sortField = request("sort_field", 'created_at');
20+
$sortDirection = request("sort_direction", "desc");
21+
22+
if (request("name")) {
23+
$query->where("name", "like", "%" . request("name") . "%");
24+
}
25+
if (request("email")) {
26+
$query->where("email", "like", "%" . request("email") . "%");
27+
}
28+
29+
$users = $query->orderBy($sortField, $sortDirection)
30+
->paginate(10)
31+
->onEachSide(1);
32+
33+
return inertia("User/Index", [
34+
"users" => UserCrudResource::collection($users),
35+
'queryParams' => request()->query() ?: null,
36+
'success' => session('success'),
37+
]);
1738
}
1839

1940
/**
2041
* Show the form for creating a new resource.
2142
*/
2243
public function create()
2344
{
24-
//
45+
return inertia("User/Create");
2546
}
2647

2748
/**
2849
* Store a newly created resource in storage.
2950
*/
3051
public function store(StoreUserRequest $request)
3152
{
32-
//
53+
$data = $request->validated();
54+
$data['email_verified_at'] = time();
55+
$data['password'] = bcrypt($data['password']);
56+
User::create($data);
57+
58+
return to_route('user.index')
59+
->with('success', 'User was created');
3360
}
3461

3562
/**
@@ -45,22 +72,37 @@ public function show(User $user)
4572
*/
4673
public function edit(User $user)
4774
{
48-
//
75+
return inertia('User/Edit', [
76+
'user' => new UserCrudResource($user),
77+
]);
4978
}
5079

5180
/**
5281
* Update the specified resource in storage.
5382
*/
5483
public function update(UpdateUserRequest $request, User $user)
5584
{
56-
//
85+
$data = $request->validated();
86+
$password = $data['password'] ?? null;
87+
if ($password) {
88+
$data['password'] = bcrypt($password);
89+
} else {
90+
unset($data['password']);
91+
}
92+
$user->update($data);
93+
94+
return to_route('user.index')
95+
->with('success', "User \"$user->name\" was updated");
5796
}
5897

5998
/**
6099
* Remove the specified resource from storage.
61100
*/
62101
public function destroy(User $user)
63102
{
64-
//
103+
$name = $user->name;
104+
$user->delete();
105+
return to_route('user.index')
106+
->with('success', "User \"$name\" was deleted");
65107
}
66108
}

app/Http/Requests/StoreTaskRequest.php

+16-2
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
namespace App\Http\Requests;
44

55
use Illuminate\Foundation\Http\FormRequest;
6+
use Illuminate\Validation\Rule;
67

78
class StoreTaskRequest extends FormRequest
89
{
@@ -11,7 +12,7 @@ class StoreTaskRequest extends FormRequest
1112
*/
1213
public function authorize(): bool
1314
{
14-
return false;
15+
return true;
1516
}
1617

1718
/**
@@ -22,7 +23,20 @@ public function authorize(): bool
2223
public function rules(): array
2324
{
2425
return [
25-
//
26+
"name" => ['required', 'max:255'],
27+
'image' => ['nullable', 'image'],
28+
"description" => ['nullable', 'string'],
29+
'due_date' => ['nullable', 'date'],
30+
'project_id' => ['required', 'exists:projects,id'],
31+
'assigned_user_id' => ['required', 'exists:users,id'],
32+
'status' => [
33+
'required',
34+
Rule::in(['pending', 'in_progress', 'completed'])
35+
],
36+
'priority' => [
37+
'required',
38+
Rule::in(['low', 'medium', 'high'])
39+
]
2640
];
2741
}
2842
}

app/Http/Requests/StoreUserRequest.php

+9-2
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
namespace App\Http\Requests;
44

55
use Illuminate\Foundation\Http\FormRequest;
6+
use Illuminate\Validation\Rules\Password;
67

78
class StoreUserRequest extends FormRequest
89
{
@@ -11,7 +12,7 @@ class StoreUserRequest extends FormRequest
1112
*/
1213
public function authorize(): bool
1314
{
14-
return false;
15+
return true;
1516
}
1617

1718
/**
@@ -22,7 +23,13 @@ public function authorize(): bool
2223
public function rules(): array
2324
{
2425
return [
25-
//
26+
"name" => ["required", "string", "max:255"],
27+
"email" => ["required", "string", "email", "unique:users,email"],
28+
"password" => [
29+
"required",
30+
'confirmed',
31+
Password::min(8)->letters()->symbols(),
32+
],
2633
];
2734
}
2835
}

0 commit comments

Comments
 (0)