diff --git a/app/Http/Controllers/TasksController.php b/app/Http/Controllers/TasksController.php index cb9f5b4..454552a 100644 --- a/app/Http/Controllers/TasksController.php +++ b/app/Http/Controllers/TasksController.php @@ -3,6 +3,7 @@ namespace App\Http\Controllers; use App\Models\Events; +use App\Models\Task; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Illuminate\Support\Facades\Log; @@ -43,4 +44,23 @@ class TasksController extends Controller return response()->json(['message' => "Server error"], 500); } } + + public function assignSelf(Request $request): JsonResponse { + + try { + + $task = Task::find($request["task_id"]); + + if($task->max_participants = $task->users()->count()) { + return response()->json(["message" => "Max participants reached"], 403); + } + + $task->users()->attach($request->user()->id); + return response()->json(['message' => "Task assigned"], 200); + + } catch (\Exception $e) { + Log::info($e->getMessage()); + return response()->json(['message' => "Server error"], 500); + } + } } diff --git a/routes/api.php b/routes/api.php index 91372b0..bc3aa52 100644 --- a/routes/api.php +++ b/routes/api.php @@ -36,3 +36,5 @@ Route::middleware(['web', 'auth:sanctum'])->get('/users', [UserController::class Route::middleware(['web', 'auth:sanctum'])->post('/events/create', [EventsController::class, "create"]); Route::middleware(['web', 'auth:sanctum'])->post('/events/task', [TasksController::class, "create"]); + +Route::middleware(['web', 'auth:sanctum'])->post('/events/task/assign', [TasksController::class, "assignSelf"]); diff --git a/tests/Events/tasks/Assign task.bru b/tests/Events/tasks/Assign task.bru new file mode 100644 index 0000000..f8a4143 --- /dev/null +++ b/tests/Events/tasks/Assign task.bru @@ -0,0 +1,30 @@ +meta { + name: Assign task + type: http + seq: 2 +} + +post { + url: {{url}}/api/events/task/assign + body: json + auth: inherit +} + +headers { + X-XSRF-TOKEN: +} + +body:json { + { + "task_id": "{{taskId}}" + } +} + +vars:pre-request { + taskId: 1 +} + +settings { + encodeUrl: true + timeout: 0 +}