Passed
Pull Request — master (#4)
by Ostap
03:59
created

SchoolProposalController::store()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 14
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

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