Skip to content

Commit ccaa88f

Browse files
feature: add/remove users to squad via api (#89)
* feature: add/remove users to squad via api * styleci * squads: return http 409 when user cannot be added
1 parent ae41362 commit ccaa88f

File tree

2 files changed

+72
-0
lines changed

2 files changed

+72
-0
lines changed

src/Http/Controllers/Api/v2/SquadController.php

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
use Seat\Api\Http\Resources\SquadResource;
2929
use Seat\Api\Http\Validation\NewSquad;
3030
use Seat\Web\Models\Squads\Squad;
31+
use Seat\Web\Models\User;
3132

3233
class SquadController extends ApiController
3334
{
@@ -173,4 +174,73 @@ public function destroy(int $squad_id): JsonResponse
173174

174175
return response()->json();
175176
}
177+
178+
#[OA\Post(
179+
path: '/api/v2/squads/{squad_id}/add/{user_id}',
180+
description: 'Adds a user to a squad',
181+
summary: 'Adds a user to a squad. If the user is not eligible according to the squad\'s filters, the user cannot be added.',
182+
security: [
183+
[
184+
'ApiKeyAuth' => [],
185+
],
186+
],
187+
tags: [
188+
'Squads',
189+
],
190+
parameters: [
191+
new OA\Parameter(name: 'squad_id', description: 'A SeAT Squad ID', in: 'path', required: true, schema: new OA\Schema(type: 'integer')),
192+
new OA\Parameter(name: 'user_id', description: 'A SeAT User ID', in: 'path', required: true, schema: new OA\Schema(type: 'integer')),
193+
],
194+
responses: [
195+
new OA\Response(response: 200, description: 'Successful operation'),
196+
new OA\Response(response: 400, description: 'Bad request'),
197+
new OA\Response(response: 401, description: 'Unauthorized'),
198+
new OA\Response(response: 409, description: 'Conflict'),
199+
]
200+
)]
201+
public function addUser($squad_id, $user_id)
202+
{
203+
$squad = Squad::findOrFail($squad_id);
204+
$user = User::findOrFail($user_id);
205+
206+
if(! $squad->isUserEligible($user)){
207+
return response()->json('The squad filter doesn\'t allow this user in this squad.', 409);
208+
}
209+
210+
$squad->members()->attach($user->id);
211+
212+
return response()->json();
213+
}
214+
215+
#[OA\Post(
216+
path: '/api/v2/squads/{squad_id}/remove/{user_id}',
217+
description: 'Removes a user from a squad',
218+
summary: 'Removes a user from a squad.',
219+
security: [
220+
[
221+
'ApiKeyAuth' => [],
222+
],
223+
],
224+
tags: [
225+
'Squads',
226+
],
227+
parameters: [
228+
new OA\Parameter(name: 'squad_id', description: 'A SeAT Squad ID', in: 'path', required: true, schema: new OA\Schema(type: 'integer')),
229+
new OA\Parameter(name: 'user_id', description: 'A SeAT User ID', in: 'path', required: true, schema: new OA\Schema(type: 'integer')),
230+
],
231+
responses: [
232+
new OA\Response(response: 200, description: 'Successful operation'),
233+
new OA\Response(response: 400, description: 'Bad request'),
234+
new OA\Response(response: 401, description: 'Unauthorized'),
235+
]
236+
)]
237+
public function removeUser($squad_id, $user_id)
238+
{
239+
$squad = Squad::findOrFail($squad_id);
240+
$user = User::findOrFail($user_id);
241+
242+
$squad->members()->detach($user->id);
243+
244+
return response()->json();
245+
}
176246
}

src/Http/routes.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,8 @@
7777
Route::post('/')->uses('SquadController@store');
7878
Route::put('/{squad_id}')->uses('SquadController@update');
7979
Route::delete('/{squad_id}')->uses('SquadController@destroy');
80+
Route::post('/{squad_id}/add/{user_id}')->uses('SquadController@addUser');
81+
Route::post('/{squad_id}/remove/{user_id}')->uses('SquadController@removeUser');
8082
});
8183

8284
Route::group(['prefix' => 'roles'], function () {

0 commit comments

Comments
 (0)