-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathProjectController.php
More file actions
94 lines (73 loc) · 2.62 KB
/
ProjectController.php
File metadata and controls
94 lines (73 loc) · 2.62 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
<?php
namespace App\Core\Http\Controllers;
use App\Core\Http\Requests\StoreProjectRequest;
use App\Core\Http\Requests\UpdateProjectRequest;
use App\Core\Http\Resources\ProjectResource;
use App\Core\Models\Project;
use App\Core\Models\ProjectMember;
use App\Core\Models\User;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
class ProjectController extends Controller
{
public function index(Request $request): JsonResponse
{
/** @var User $user */
$user = $request->user();
$perPage = min((int) $request->input('per_page', 25), 100);
$projects = Project::accessibleBy($user)->paginate($perPage);
return response()->json([
'data' => ProjectResource::collection($projects),
'meta' => [
'current_page' => $projects->currentPage(),
'per_page' => $projects->perPage(),
'total' => $projects->total(),
'last_page' => $projects->lastPage(),
],
]);
}
public function store(StoreProjectRequest $request): JsonResponse
{
/** @var User $user */
$user = $request->user();
$project = Project::create($request->validated());
ProjectMember::create([
'project_id' => $project->id,
'user_id' => $user->id,
'position' => 'owner',
]);
return (new ProjectResource($project))
->response()
->setStatusCode(201);
}
public function show(Request $request, string $code): JsonResponse
{
/** @var Project $project */
$project = $request->attributes->get('project');
return (new ProjectResource($project))->response();
}
public function update(UpdateProjectRequest $request, string $code): JsonResponse
{
/** @var Project $project */
$project = $request->attributes->get('project');
$project->update($request->validated());
return (new ProjectResource($project))->response();
}
public function destroy(Request $request, string $code): JsonResponse
{
/** @var Project $project */
$project = $request->attributes->get('project');
/** @var User $user */
$user = $request->user();
$isOwner = ProjectMember::where('project_id', $project->id)
->where('user_id', $user->id)
->where('position', 'owner')
->exists();
if (! $isOwner) {
return response()->json(['message' => 'Forbidden.'], 403);
}
$project->delete();
return response()->json(null, 204);
}
}