SchoolProposalController::index()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 8
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 4
nc 2
nop 2
dl 0
loc 8
rs 10
c 0
b 0
f 0
1
<?php
2
3
namespace App\Http\Controllers\API;
4
5
use App\Http\Requests\StoreProposalRequest;
6
use App\Http\Resources\ProposalResource;
7
use Illuminate\Http\Request;
8
use App\Models\{Proposal, School};
9
use Illuminate\Routing\Middleware\SubstituteBindings;
10
use Spatie\RouteAttributes\Attributes\{Get, Post, Prefix};
11
use Symfony\Component\HttpFoundation\Response;
12
13
#[Prefix('/api/v1')]
14
final class SchoolProposalController
15
{
16
    #[Get('/schools/{school}/proposals', middleware: ['auth:sanctum', SubstituteBindings::class])]
17
    public function index(School $school, Request $request)
18
    {
19
        if (!$request->user()->school()->is($school)) {
20
            abort(Response::HTTP_FORBIDDEN);
21
        }
22
23
        return ProposalResource::collection($school->proposals);
24
    }
25
26
    #[Post('/schools/{school}/proposals', middleware: ['auth:sanctum', SubstituteBindings::class])]
27
    public function store(School $school, StoreProposalRequest $request)
28
    {
29
        if (!$request->user()->school()->is($school)) {
30
            abort(Response::HTTP_FORBIDDEN);
31
        }
32
33
        $proposal = new Proposal;
34
        $proposal->fill($request->validated());
35
        $proposal->user()->associate($request->user());
36
        $proposal->school()->associate($school);
37
        $proposal->save();
38
39
        return ProposalResource::make($proposal);
40
    }
41
}
42