55use Spatie \Fractal \Fractal ;
66use Illuminate \Http \Request ;
77use Pterodactyl \Models \Node ;
8+ use Illuminate \Http \Response ;
9+ use Illuminate \Http \JsonResponse ;
810use Pterodactyl \Http \Controllers \Controller ;
11+ use Pterodactyl \Services \Nodes \NodeUpdateService ;
12+ use Pterodactyl \Services \Nodes \NodeCreationService ;
13+ use Pterodactyl \Services \Nodes \NodeDeletionService ;
914use Pterodactyl \Transformers \Api \Admin \NodeTransformer ;
1015use League \Fractal \Pagination \IlluminatePaginatorAdapter ;
16+ use Pterodactyl \Http \Requests \Admin \Node \NodeFormRequest ;
1117use Pterodactyl \Contracts \Repository \NodeRepositoryInterface ;
1218
1319class NodeController extends Controller
1420{
21+ /**
22+ * @var \Pterodactyl\Services\Nodes\NodeCreationService
23+ */
24+ private $ creationService ;
25+
26+ /**
27+ * @var \Pterodactyl\Services\Nodes\NodeDeletionService
28+ */
29+ private $ deletionService ;
30+
1531 /**
1632 * @var \Spatie\Fractal\Fractal
1733 */
@@ -22,16 +38,32 @@ class NodeController extends Controller
2238 */
2339 private $ repository ;
2440
41+ /**
42+ * @var \Pterodactyl\Services\Nodes\NodeUpdateService
43+ */
44+ private $ updateService ;
45+
2546 /**
2647 * NodeController constructor.
2748 *
2849 * @param \Spatie\Fractal\Fractal $fractal
50+ * @param \Pterodactyl\Services\Nodes\NodeCreationService $creationService
51+ * @param \Pterodactyl\Services\Nodes\NodeDeletionService $deletionService
52+ * @param \Pterodactyl\Services\Nodes\NodeUpdateService $updateService
2953 * @param \Pterodactyl\Contracts\Repository\NodeRepositoryInterface $repository
3054 */
31- public function __construct (Fractal $ fractal , NodeRepositoryInterface $ repository )
32- {
55+ public function __construct (
56+ Fractal $ fractal ,
57+ NodeCreationService $ creationService ,
58+ NodeDeletionService $ deletionService ,
59+ NodeUpdateService $ updateService ,
60+ NodeRepositoryInterface $ repository
61+ ) {
3362 $ this ->fractal = $ fractal ;
3463 $ this ->repository = $ repository ;
64+ $ this ->creationService = $ creationService ;
65+ $ this ->deletionService = $ deletionService ;
66+ $ this ->updateService = $ updateService ;
3567 }
3668
3769 /**
@@ -67,4 +99,63 @@ public function view(Request $request, Node $node): array
6799
68100 return $ fractal ->toArray ();
69101 }
102+
103+ /**
104+ * Create a new node on the Panel. Returns the created node and a HTTP/201
105+ * status response on success.
106+ *
107+ * @param \Pterodactyl\Http\Requests\Admin\Node\NodeFormRequest $request
108+ * @return \Illuminate\Http\JsonResponse
109+ *
110+ * @throws \Pterodactyl\Exceptions\Model\DataValidationException
111+ */
112+ public function store (NodeFormRequest $ request ): JsonResponse
113+ {
114+ $ node = $ this ->creationService ->handle ($ request ->normalize ());
115+
116+ return $ this ->fractal ->item ($ node )
117+ ->transformWith (new NodeTransformer ($ request ))
118+ ->withResourceName ('node ' )
119+ ->addMeta ([
120+ 'link ' => route ('api.admin.node.view ' , ['node ' => $ node ->id ]),
121+ ])
122+ ->respond (201 );
123+ }
124+
125+ /**
126+ * Update an existing node on the Panel.
127+ *
128+ * @param \Pterodactyl\Http\Requests\Admin\Node\NodeFormRequest $request
129+ * @param \Pterodactyl\Models\Node $node
130+ * @return array
131+ *
132+ * @throws \Pterodactyl\Exceptions\DisplayException
133+ * @throws \Pterodactyl\Exceptions\Model\DataValidationException
134+ * @throws \Pterodactyl\Exceptions\Repository\RecordNotFoundException
135+ */
136+ public function update (NodeFormRequest $ request , Node $ node ): array
137+ {
138+ $ node = $ this ->updateService ->returnUpdatedModel ()->handle ($ node , $ request ->normalize ());
139+
140+ return $ this ->fractal ->item ($ node )
141+ ->transformWith (new NodeTransformer ($ request ))
142+ ->withResourceName ('node ' )
143+ ->toArray ();
144+ }
145+
146+ /**
147+ * Deletes a given node from the Panel as long as there are no servers
148+ * currently attached to it.
149+ *
150+ * @param \Pterodactyl\Models\Node $node
151+ * @return \Illuminate\Http\Response
152+ *
153+ * @throws \Pterodactyl\Exceptions\Service\HasActiveServersException
154+ */
155+ public function delete (Node $ node ): Response
156+ {
157+ $ this ->deletionService ->handle ($ node );
158+
159+ return response ('' , 201 );
160+ }
70161}
0 commit comments