diff --git a/app/Http/Controllers/Api/AuthController.php b/app/Http/Controllers/Api/AuthController.php new file mode 100644 index 0000000..f2ed973 --- /dev/null +++ b/app/Http/Controllers/Api/AuthController.php @@ -0,0 +1,106 @@ +all(), + [ + 'name' => 'required', + 'email' => 'required|email|unique:users,email', + 'password' => 'required', + 'role_id' => 'required' + ]); + + if($validateUser->fails()){ + return response()->json([ + 'status' => false, + 'message' => 'validation error', + 'errors' => $validateUser->errors() + ], 401); + } + + $user = User::create([ + 'name' => $request->name, + 'email' => $request->email, + 'password' => Hash::make($request->password), + 'role_id' => $request->role_id + ]); + + return response()->json([ + 'status' => true, + 'message' => 'User Created Successfully', + 'token' => $user->createToken("API TOKEN")->plainTextToken + ], 200); + + } catch (\Throwable $th) { + return response()->json([ + 'status' => false, + 'message' => $th->getMessage() + ], 500); + } + } + + /** + * Login The User + * @param Request $request + * @return User + */ + public function loginUser(Request $request) + { + try { + $validateUser = Validator::make($request->all(), + [ + 'email' => 'required|email', + 'password' => 'required' + ]); + + if($validateUser->fails()){ + return response()->json([ + 'status' => false, + 'message' => 'validation error', + 'errors' => $validateUser->errors() + ], 401); + } + + if(!Auth::attempt($request->only(['email', 'password']))){ + return response()->json([ + 'status' => false, + 'message' => 'Email & Password does not match with our record.', + ], 401); + } + + $user = User::with('userrole')->where('email', $request->email)->first(); + Log::info("enter1=". $user); + + return response()->json([ + 'status' => true, + 'message' => 'User Logged In Successfully', + 'token' => $user->createToken("API TOKEN")->plainTextToken + ], 200); + + } catch (\Throwable $th) { + return response()->json([ + 'status' => false, + 'message' => $th->getMessage() + ], 500); + } + } +} diff --git a/app/Http/Controllers/Api/ProjectController.php b/app/Http/Controllers/Api/ProjectController.php new file mode 100644 index 0000000..bce13f4 --- /dev/null +++ b/app/Http/Controllers/Api/ProjectController.php @@ -0,0 +1,230 @@ +user()->userrole->role_name) == 'PRODUCT_OWNER') { + //Validated + $validateProject = Validator::make($request->all(), + [ + 'name' => 'required', + ]); + + if($validateProject->fails()){ + return response()->json([ + 'status' => false, + 'message' => 'validation error', + 'errors' => $validateProject->errors() + ], 401); + } + + $project = Project::create([ + 'name' => $request->name, + 'user_id' => auth()->user()->id, + ]); + + return response()->json([ + 'status' => true, + 'message' => 'Project Created Successfully', + 'id' => $project->id, + ], 200); + } + else{ + return response([ + 'message' => 'Only PRODUCT_OWNER Role User Can Create Project.', + ]); + } + + } catch (\Throwable $th) { + return response()->json([ + 'status' => false, + 'message' => $th->getMessage() + ], 500); + } + } + public function get(Request $request) + { + try { + $data = []; + if(strtoupper(auth()->user()->userrole->role_name) == 'ADMIN') { + $data = Project::with('projectUser')->find($request->id); + } else if(strtoupper(auth()->user()->userrole->role_name) == 'PRODUCT_OWNER') { + $data = Project::with('projectUser')->where('user_id','=', auth()->user()->id)->find($request->id); + }else{ + $data = []; + } + // print_r($data); + if($data){ + http_response_code(200); + return response([ + 'message' => 'Data successfully retrieved.', + 'data' => $data + ]); + } + else{ + http_response_code(200); + return response([ + 'message' => 'No Record Found!!', + ]); + } + } catch (RequestException $r) { + + http_response_code(400); + return response([ + 'message' => 'Failed to retrieve data.', + 'errorCode' => 4103 + ],400); + } + } + public function getAll(Request $request) + { + try { + $data = []; + if(strtoupper(auth()->user()->userrole->role_name) == 'ADMIN') { + + \DB::enableQueryLog(); + ; + $data = Project::with('projectUser')->where('name','LIKE','%'.$request->q.'%')->orderby($request->sortBy,$request->sortDirection)->paginate($request->pageSize); + $data->count(); + } else if(strtoupper(auth()->user()->userrole->role_name) == 'PRODUCT_OWNER') { + $data = Project::with('projectUser')->where('user_id','=', auth()->user()->id)->where('name','LIKE','%'.$request->q.'%')->orderby($request->sortBy,$request->sortDirection)->paginate($request->pageSize); + $data->count(); + }else{ + return response([ + 'message' => 'Unauthorized User!!', + ]); + } + + + http_response_code(200); + return response([ + 'message' => 'Data successfully retrieved.', + 'data' => $data + ]); + } catch (RequestException $r) { + + http_response_code(400); + return response([ + 'message' => 'Failed to retrieve data.', + 'errorCode' => 4103 + ],400); + } + } + public function update(Request $request, $id) + { + try { + $data = Project::findOrFail($id); + if(strtoupper(auth()->user()->userrole->role_name) == 'PRODUCT_OWNER' && auth()->user()->id == $data->user_id) { + $validateProject = Validator::make($request->all(), + [ + 'name' => 'required', + ]); + + if($validateProject->fails()){ + return response()->json([ + 'status' => false, + 'message' => 'validation error', + 'errors' => $validateProject->errors() + ], 401); + } + + $data->name = $request->name; + $data->save(); + + return response([ + 'message' => 'Update Successful', + ]); + }else{ + return response([ + 'message' => 'Only Owner Can Update Project', + ]); + } + + } catch (RequestException $r) { + + http_response_code(400); + return response([ + 'message' => 'Data failed to be updated Project.', + 'errorCode' => 4101, + ], 400); + } + } + public function patchupdate(Request $request, $id) + { + try { + $data = Project::findOrFail($id); + if(strtoupper(auth()->user()->userrole->role_name) == 'PRODUCT_OWNER' && auth()->user()->id == $data->user_id) { + $validateProject = Validator::make($request->all(), + [ + 'name' => 'required', + ]); + + if($validateProject->fails()){ + return response()->json([ + 'status' => false, + 'message' => 'validation error', + 'errors' => $validateProject->errors() + ], 401); + } + + $data->name = $request->name; + $data->save(); + + http_response_code(200); + return response([ + 'message' => 'Update Successful', + ]); + }else{ + return response([ + 'message' => 'Only Owner Can Update Project', + ]); + } + + } catch (RequestException $r) { + + http_response_code(400); + return response([ + 'message' => 'Data failed to be updated Project.', + 'errorCode' => 4101, + ], 400); + } + } + public function delete($id) + { + try { + $data = Project::find($id); + if(strtoupper(auth()->user()->userrole->role_name) == 'PRODUCT_OWNER' && auth()->user()->id == $data->user_id) { + $data->delete(); + return response([ + 'message' => 'Data successfully deleted.', + ]); + }else{ + return response([ + 'message' => 'Only Owner Can Delete Project', + ]); + } + + } catch (RequestException $r) { + + http_response_code(400); + return response([ + 'message' => 'Data failed to be deleted.', + 'errorCode' => 4102, + ], 400); + } + } +} diff --git a/app/Http/Controllers/Api/TaskController.php b/app/Http/Controllers/Api/TaskController.php new file mode 100644 index 0000000..1eb4b49 --- /dev/null +++ b/app/Http/Controllers/Api/TaskController.php @@ -0,0 +1,276 @@ +user()->userrole->role_name) == 'PRODUCT_OWNER') { + //Validated + $validateTask = Validator::make($request->all(), + [ + 'title' => 'required', + // 'status_id' => 'required', + 'user_id' => 'required', + 'project_id' => 'required', + ]); + + if($validateTask->fails()){ + return response()->json([ + 'status' => false, + 'message' => 'validation error', + 'errors' => $validateTask->errors() + ], 401); + } + $task = Task::create([ + 'title' => $request->title, + 'description' => $request->description, + 'status_id' => 1, // 1 for NOT_STARTED + 'user_id' => $request->user_id, + 'project_id' => $request->project_id, + ]); + + return response()->json([ + 'status' => true, + 'message' => 'Task Created Successfully', + ], 200); + }else{ + return response([ + 'message' => 'Only PRODUCT_OWNER Role User Can Create Task.', + ]); + } + + } catch (\Throwable $th) { + return response()->json([ + 'status' => false, + 'message' => $th->getMessage() + ], 500); + } + } + public function get(Request $request) + { + try { + if(strtoupper(auth()->user()->userrole->role_name) == 'ADMIN') { + $data = Task::with(['taskUser' => function ($q) { + return $q->select('id', 'name'); + }, 'taskProject' => function ($q) { + return $q->select('id', 'name','user_id'); + }, 'taskStatus' => function ($q) { + return $q->select('id', 'status'); + }])->find($request->id); + }else if(strtoupper(auth()->user()->userrole->role_name) == 'PRODUCT_OWNER') { + $data = Task::with(['taskUser' => function ($q) { + return $q->select('id', 'name'); + }, 'taskProject' => function ($q) { + return $q->select('id', 'name','user_id'); + }, 'taskStatus' => function ($q) { + return $q->select('id', 'status'); + }])->whereHas('taskProject', function ($q) { + return $q->where('user_id', '=', auth()->user()->id); + })->find($request->id); + }else if(strtoupper(auth()->user()->userrole->role_name) == 'TEAM_MEMBER') { + $data = Task::with(['taskUser' => function ($q) { + return $q->select('id', 'name'); + }, 'taskProject' => function ($q) { + return $q->select('id', 'name','user_id'); + }, 'taskStatus' => function ($q) { + return $q->select('id', 'status'); + }])->where('user_id', '=', auth()->user()->id)->find($request->id); + } + if($data){ + http_response_code(200); + return response([ + 'message' => 'Data successfully retrieved.', + 'data' => $data + ]); + } + else{ + http_response_code(200); + return response([ + 'message' => 'No Record Found!!', + ]); + } + } catch (RequestException $r) { + + http_response_code(400); + return response([ + 'message' => 'Failed to retrieve data.', + 'errorCode' => 4103 + ],400); + } + } + public function getAll(Request $request) + { + try { + $data = []; + if(strtoupper(auth()->user()->userrole->role_name) == 'ADMIN') { + $data = Task::with(['taskUser' => function ($q) { + return $q->select('id', 'name'); + }, 'taskProject' => function ($q) { + return $q->select('id', 'name','user_id'); + }, 'taskStatus' => function ($q) { + return $q->select('id', 'status'); + }])->orderby('id', 'desc')->get(); + }else if(strtoupper(auth()->user()->userrole->role_name) == 'PRODUCT_OWNER') { + $data = Task::with(['taskUser' => function ($q) { + return $q->select('id', 'name'); + }, 'taskProject' => function ($q) { + return $q->select('id', 'name','user_id'); + }, 'taskStatus' => function ($q) { + return $q->select('id', 'status'); + }])->whereHas('taskProject', function ($q) { + return $q->where('user_id', '=', auth()->user()->id); + })->orderby('id', 'desc')->get(); + }else if(strtoupper(auth()->user()->userrole->role_name) == 'TEAM_MEMBER') { + $data = Task::with(['taskUser' => function ($q) { + return $q->select('id', 'name'); + }, 'taskProject' => function ($q) { + return $q->select('id', 'name','user_id'); + }, 'taskStatus' => function ($q) { + return $q->select('id', 'status'); + }])->orderby('id', 'desc')->where('user_id', '=', auth()->user()->id)->get(); + } + // return view('tasklist', compact('pro')); + return response([ + 'message' => 'Data successfully retrieved.', + 'data' => $data + ]); + } catch (RequestException $r) { + + http_response_code(400); + return response([ + 'message' => 'Failed to retrieve data.', + 'errorCode' => 4103 + ],400); + } + } + public function update(Request $request, $id) + { + try { + $data = Task::findOrFail($id); + if(strtoupper(auth()->user()->userrole->role_name) == 'PRODUCT_OWNER') { + $validateTask = Validator::make($request->all(), + [ + 'title' => 'required', + // 'status_id' => 'required', + // 'user_id' => 'required', + // 'project_id' => 'required', + ]); + + if($validateTask->fails()){ + return response()->json([ + 'status' => false, + 'message' => 'validation error', + 'errors' => $validateTask->errors() + ], 401); + } + + $data->title = $request->title; + $data->description = $request->description; + // $data->status_id = $request->status_id; + $data->user_id = $request->user_id; + $data->project_id = $request->project_id; + $data->save(); + + http_response_code(200); + return response([ + 'message' => 'Update Successful', + ]); + } + else{ + return response([ + 'message' => 'Only Owner Can Update Task', + ]); + } + + } catch (RequestException $r) { + + http_response_code(400); + return response([ + 'message' => 'Data failed to be updated.', + 'errorCode' => 4101, + ], 400); + } + } + public function patchupdate(Request $request, $id) + { + try { + $data = Task::findOrFail($id); + if(strtoupper(auth()->user()->userrole->role_name) == 'TEAM_MEMBER') { + + if(auth()->user()->id != $data->user_id){ + return response([ + 'message' => 'This is not your Task', + ]); + } + $validateTask = Validator::make($request->all(), + [ + 'status_id' => 'required', + ]); + if($validateTask->fails()){ + return response()->json([ + 'status' => false, + 'message' => 'validation error', + 'errors' => $validateTask->errors() + ], 401); + } + $data->status_id = $request->status_id; + $data->save(); + return response([ + 'message' => 'Update Successful', + 'data' => $data + ]); + }else{ + return response([ + 'message' => 'Only Team Member Can Update Task Status', + ]); + } + + } catch (RequestException $r) { + + http_response_code(400); + return response([ + 'message' => 'Data failed to be updated.', + 'errorCode' => 4101, + ], 400); + } + } + public function delete($id) + { + try { + if(strtoupper(auth()->user()->userrole->role_name) == 'PRODUCT_OWNER') { + $data = Task::find($id); + $data->delete(); + + http_response_code(200); + return response([ + 'message' => 'Data successfully deleted.', + ]); + }else{ + return response([ + 'message' => 'Only Owner Can Delete Task', + ]); + } + + } catch (RequestException $r) { + + http_response_code(400); + return response([ + 'message' => 'Data failed to be deleted.', + 'errorCode' => 4102, + ], 400); + } + } +} diff --git a/app/Http/Controllers/Api/TaskStatusController.php b/app/Http/Controllers/Api/TaskStatusController.php new file mode 100644 index 0000000..a448c4b --- /dev/null +++ b/app/Http/Controllers/Api/TaskStatusController.php @@ -0,0 +1,214 @@ +user()->userrole->role_name) == 'ADMIN') { + $validateStatus = Validator::make($request->all(), + [ + 'status' => 'required', + ]); + + if($validateStatus->fails()){ + return response()->json([ + 'status' => false, + 'message' => 'validation error', + 'errors' => $validateStatus->errors() + ], 401); + } + + $status = TaskStatus::create([ + 'status' => $request->status, + ]); + + return response()->json([ + 'status' => true, + 'message' => 'User Role Created Successfully', + ], 200); + }else{ + return response([ + 'message' => 'Only ADMIN User Can Create Task Status.', + ]); + } + + } catch (\Throwable $th) { + return response()->json([ + 'status' => false, + 'message' => $th->getMessage() + ], 500); + } + } + public function get(Request $request) + { + if (strtoupper(auth()->user()->userrole->role_name) == 'ADMIN') { + try { + $data = TaskStatus::find($request->id); + + if($data){ + return response([ + 'message' => 'Data successfully retrieved.', + 'data' => $data + ]); + } + else{ + return response([ + 'message' => 'No Record Found!!', + ]); + } + } catch (RequestException $r) { + + return response([ + 'message' => 'Failed to retrieve data.', + 'errorCode' => 4103 + ],400); + } + }else{ + return response([ + 'message' => 'Only ADMIN User Can See Status.', + ]); + } + } + public function getAll(Request $request) + { + + try { + if (strtoupper(auth()->user()->userrole->role_name) == 'ADMIN') { + $data = TaskStatus::orderby('id', 'desc')->get(); + return response([ + 'message' => 'Data successfully retrieved.', + 'data' => $data + ]); + }else{ + return response([ + 'message' => 'Only ADMIN User Can See Status.', + ]); + } + } catch (RequestException $r) { + + return response([ + 'message' => 'Failed to retrieve data.', + 'errorCode' => 4103 + ],400); + } + + } + public function update(Request $request, $id) + { + if (strtoupper(auth()->user()->userrole->role_name) == 'ADMIN') { + $validateStatus = Validator::make($request->all(), + [ + 'status' => 'required', + ]); + + if($validateStatus->fails()){ + return response()->json([ + 'status' => false, + 'message' => 'validation error', + 'errors' => $validateStatus->errors() + ], 401); + } + try { + $data = TaskStatus::findOrFail($id); + $data->status = $request->status; + $data->save(); + + http_response_code(200); + return response([ + 'message' => 'Update Successful', + 'data' => $data, + ]); + + } catch (RequestException $r) { + + http_response_code(400); + return response([ + 'message' => 'Data failed to be updated.', + 'errorCode' => 4101, + ], 400); + } + }else{ + return response([ + 'message' => 'Only ADMIN User Can Update Status.', + ]); + } + } + public function patchupdate(Request $request, $id) + { + if (strtoupper(auth()->user()->userrole->role_name) == 'ADMIN') { + $validateStatus = Validator::make($request->all(), + [ + 'status' => 'required', + ]); + + if($validateStatus->fails()){ + return response()->json([ + 'status' => false, + 'message' => 'validation error', + 'errors' => $validateStatus->errors() + ], 401); + } + try { + $data = TaskStatus::findOrFail($id); + $data->status = $request->status; + $data->save(); + + http_response_code(200); + return response([ + 'message' => 'Update Successful', + ]); + + } catch (RequestException $r) { + + http_response_code(400); + return response([ + 'message' => 'Data failed to be updated.', + 'errorCode' => 4101, + ], 400); + } + }else{ + return response([ + 'message' => 'Only ADMIN User Can Update Status.', + ]); + } + } + public function delete($id) + { + + try { + if (strtoupper(auth()->user()->userrole->role_name) == 'ADMIN') { + $data = TaskStatus::find($id); + $data->delete(); + + http_response_code(200); + return response([ + 'message' => 'Data successfully deleted.', + ]); + }else{ + return response([ + 'message' => 'Only ADMIN User Can Delete Role.', + ]); + } + + } catch (RequestException $r) { + + http_response_code(400); + return response([ + 'message' => 'Data failed to be deleted.', + 'errorCode' => 4102, + ], 400); + } + } +} diff --git a/app/Http/Controllers/Api/UserController.php b/app/Http/Controllers/Api/UserController.php new file mode 100644 index 0000000..e4c7d84 --- /dev/null +++ b/app/Http/Controllers/Api/UserController.php @@ -0,0 +1,186 @@ +user()->userrole->role_name) == 'ADMIN' || auth()->user()->id == $request->user_id) { + $data = User::with('userrole')->find($request->user_id); + } + else{ + $data = []; + return response([ + 'message' => 'Only ADMIN User Can See.', + ]); + } + + if($data){ + return response([ + 'message' => 'Data successfully retrieved.', + 'data' => $data + ]); + } + else{ + return response([ + 'message' => 'No Record Found!!', + ]); + } + } catch (RequestException $r) { + + http_response_code(400); + return response([ + 'message' => 'Failed to retrieve data.', + 'errorCode' => 4103 + ],400); + } + } + public function getAll(Request $request) + { + try { + // Log::info("enter=". strtoupper(auth()->user()->userrole->role_name)); + if (strtoupper(auth()->user()->userrole->role_name) == 'ADMIN') { + $data = User::with('userrole')->orderby('id', 'desc')->get(); + + return response([ + 'message' => 'Data successfully retrieved.', + 'data' => $data + ]); + } + else{ + return response([ + 'message' => 'Only Admin User Can See!!', + //'data' => $data + ]); + } + } catch (RequestException $r) { + + http_response_code(400); + return response([ + 'message' => 'Failed to retrieve data.', + 'errorCode' => 4103 + ],400); + } + } + public function update(Request $request, $id) + { + // Log::info("update=". $request->name); + $validateUser = Validator::make($request->all(), + [ + 'name' => 'required', + 'email' => 'required|email', + 'role_id' => 'required' + ]); + + if($validateUser->fails()){ + return response()->json([ + 'status' => false, + 'message' => 'validation error', + 'errors' => $validateUser->errors() + ], 401); + } + try { + if (strtoupper(auth()->user()->userrole->role_name) == 'ADMIN') { + $data = User::with('userrole')->findOrFail($id); + $data->name = $request->name; + $data->email = $request->email; + $data->role_id = $request->role_id; + $data->save(); + + return response([ + 'message' => 'Update Successful', + 'data' => $data, + ]); + }else{ + return response([ + 'message' => 'Only Admin User Can Update!!', + ]); + } + + } catch (RequestException $r) { + + return response([ + 'message' => 'Data failed to be updated.', + 'errorCode' => 4101, + ], 400); + } + } + public function patchupdate(Request $request, $id) + { + // Log::info("update=". $request->name); + $validateUser = Validator::make($request->all(), + [ + 'name' => 'required', + ]); + + if($validateUser->fails()){ + return response()->json([ + 'status' => false, + 'message' => 'validation error', + 'errors' => $validateUser->errors() + ], 401); + } + try { + if (strtoupper(auth()->user()->userrole->role_name) == 'ADMIN') { + $data = User::with('userrole')->findOrFail($id); + $data->name = $request->name; + // $data->email = $request->email; + // $data->role_id = $request->role_id; + $data->save(); + + http_response_code(200); + return response([ + 'message' => 'Update Successful', + 'data' => $data, + ]); + }else{ + return response([ + 'message' => 'Only Admin User Can Update!!', + ]); + } + + } catch (RequestException $r) { + + http_response_code(400); + return response([ + 'message' => 'Data failed to be updated.', + 'errorCode' => 4101, + ], 400); + } + } + public function delete($id) + { + try { + if (strtoupper(auth()->user()->userrole->role_name) == 'ADMIN') { + $data = User::find($id); + $data->delete(); + + return response([ + 'message' => 'Data successfully deleted.', + ]); + }else{ + return response([ + 'message' => 'Only Admin User Can delete.', + ]); + } + + } catch (RequestException $r) { + + http_response_code(400); + return response([ + 'message' => 'Data failed to be deleted.', + 'errorCode' => 4102, + ], 400); + } + } +} diff --git a/app/Http/Controllers/Api/UserRoleController.php b/app/Http/Controllers/Api/UserRoleController.php new file mode 100644 index 0000000..b6b4f08 --- /dev/null +++ b/app/Http/Controllers/Api/UserRoleController.php @@ -0,0 +1,217 @@ +user()->userrole->role_name) == 'ADMIN') { + $validateRole = Validator::make($request->all(), + [ + 'role_name' => 'required', + ]); + + if($validateRole->fails()){ + return response()->json([ + 'status' => false, + 'message' => 'validation error', + 'errors' => $validateRole->errors() + ], 401); + } + + $role = UserRole::create([ + 'role_name' => $request->role_name, + ]); + + return response()->json([ + 'status' => true, + 'message' => 'User Role Created Successfully', + ], 200); + }else{ + return response([ + 'message' => 'Only ADMIN User Can Create Role.', + ]); + } + + } catch (\Throwable $th) { + return response()->json([ + 'status' => false, + 'message' => $th->getMessage() + ], 500); + } + } + public function get(Request $request) + { + try { + $data = []; + if (strtoupper(auth()->user()->userrole->role_name) == 'ADMIN') { + $data = UserRole::find($request->id); + }else{ + return response([ + 'message' => 'Only ADMIN User Can See Role.', + ]); + } + + if($data){ + http_response_code(200); + return response([ + 'message' => 'Data successfully retrieved.', + 'data' => $data + ]); + } + else{ + http_response_code(200); + return response([ + 'message' => 'No Record Found!!', + ]); + } + } catch (RequestException $r) { + + http_response_code(400); + return response([ + 'message' => 'Failed to retrieve data.', + 'errorCode' => 4103 + ],400); + } + } + public function getAll(Request $request) + { + try { + if (strtoupper(auth()->user()->userrole->role_name) == 'ADMIN') { + $data = UserRole::orderby('id', 'desc')->get(); + + + http_response_code(200); + return response([ + 'message' => 'Data successfully retrieved.', + 'data' => $data + ]); + }else{ + return response([ + 'message' => 'Only ADMIN User Can See Roles.', + ]); + } + } catch (RequestException $r) { + + return response([ + 'message' => 'Failed to retrieve data.', + 'errorCode' => 4103 + ],400); + } + } + public function update(Request $request, $id) + { + if (strtoupper(auth()->user()->userrole->role_name) == 'ADMIN') { + $validateRole = Validator::make($request->all(), + [ + 'role_name' => 'required', + ]); + + if($validateRole->fails()){ + return response()->json([ + 'status' => false, + 'message' => 'validation error', + 'errors' => $validateRole->errors() + ], 401); + } + try { + $data = UserRole::findOrFail($id); + $data->role_name = $request->role_name; + $data->save(); + + http_response_code(200); + return response([ + 'message' => 'Update Successful', + ]); + + } catch (RequestException $r) { + + http_response_code(400); + return response([ + 'message' => 'Data failed to be updated.', + 'errorCode' => 4101, + ], 400); + } + }else{ + return response([ + 'message' => 'Only ADMIN User Can Update Role.', + ]); + } + } + public function patchupdate(Request $request, $id) + { + if (strtoupper(auth()->user()->userrole->role_name) == 'ADMIN') { + $validateRole = Validator::make($request->all(), + [ + 'role_name' => 'required', + ]); + + if($validateRole->fails()){ + return response()->json([ + 'status' => false, + 'message' => 'validation error', + 'errors' => $validateRole->errors() + ], 401); + } + try { + $data = UserRole::findOrFail($id); + $data->role_name = $request->role_name; + $data->save(); + + http_response_code(200); + return response([ + 'message' => 'Update Successful', + ]); + + } catch (RequestException $r) { + + http_response_code(400); + return response([ + 'message' => 'Data failed to be updated.', + 'errorCode' => 4101, + ], 400); + } + }else{ + return response([ + 'message' => 'Only ADMIN User Can Update Role.', + ]); + } + } + public function delete($id) + { + try { + if (strtoupper(auth()->user()->userrole->role_name) == 'ADMIN') { + $data = UserRole::find($id); + $data->delete(); + + http_response_code(200); + return response([ + 'message' => 'Data successfully deleted.', + ]); + }else{ + return response([ + 'message' => 'Only ADMIN User Can Delete Role.', + ]); + } + + } catch (RequestException $r) { + + http_response_code(400); + return response([ + 'message' => 'Data failed to be deleted.', + 'errorCode' => 4102, + ], 400); + } + } +} diff --git a/app/Models/Project.php b/app/Models/Project.php new file mode 100644 index 0000000..5bc3fbf --- /dev/null +++ b/app/Models/Project.php @@ -0,0 +1,22 @@ +hasOne('App\Models\User', 'id', 'user_id'); + } +} diff --git a/app/Models/Task.php b/app/Models/Task.php new file mode 100644 index 0000000..0d7dc3f --- /dev/null +++ b/app/Models/Task.php @@ -0,0 +1,30 @@ +hasOne('App\Models\User', 'id', 'user_id'); + } + public function taskProject() + { + return $this->belongsTo('App\Models\Project', 'project_id'); + } + public function taskStatus() + { + return $this->hasOne('App\Models\TaskStatus', 'id', 'status_id'); + } +} diff --git a/app/Models/TaskStatus.php b/app/Models/TaskStatus.php new file mode 100644 index 0000000..0abbd01 --- /dev/null +++ b/app/Models/TaskStatus.php @@ -0,0 +1,14 @@ + 'datetime', ]; + public function userrole() + { + return $this->hasOne('App\Models\UserRole', 'id', 'role_id'); + } } diff --git a/app/Models/UserRole.php b/app/Models/UserRole.php new file mode 100644 index 0000000..6f4b9ec --- /dev/null +++ b/app/Models/UserRole.php @@ -0,0 +1,15 @@ +=7.2" @@ -502,7 +558,7 @@ ], "support": { "issues": "https://github.com/fruitcake/laravel-cors/issues", - "source": "https://github.com/fruitcake/laravel-cors/tree/v2.1.0" + "source": "https://github.com/fruitcake/laravel-cors/tree/v2.2.0" }, "funding": [ { @@ -514,99 +570,28 @@ "type": "github" } ], - "time": "2022-02-19T14:17:28+00:00" - }, - { - "name": "fruitcake/php-cors", - "version": "v1.2.0", - "source": { - "type": "git", - "url": "https://github.com/fruitcake/php-cors.git", - "reference": "58571acbaa5f9f462c9c77e911700ac66f446d4e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/fruitcake/php-cors/zipball/58571acbaa5f9f462c9c77e911700ac66f446d4e", - "reference": "58571acbaa5f9f462c9c77e911700ac66f446d4e", - "shasum": "" - }, - "require": { - "php": "^7.4|^8.0", - "symfony/http-foundation": "^4.4|^5.4|^6" - }, - "require-dev": { - "phpstan/phpstan": "^1.4", - "phpunit/phpunit": "^9", - "squizlabs/php_codesniffer": "^3.5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.1-dev" - } - }, - "autoload": { - "psr-4": { - "Fruitcake\\Cors\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fruitcake", - "homepage": "https://fruitcake.nl" - }, - { - "name": "Barryvdh", - "email": "barryvdh@gmail.com" - } - ], - "description": "Cross-origin resource sharing library for the Symfony HttpFoundation", - "homepage": "https://github.com/fruitcake/php-cors", - "keywords": [ - "cors", - "laravel", - "symfony" - ], - "support": { - "issues": "https://github.com/fruitcake/php-cors/issues", - "source": "https://github.com/fruitcake/php-cors/tree/v1.2.0" - }, - "funding": [ - { - "url": "https://fruitcake.nl", - "type": "custom" - }, - { - "url": "https://github.com/barryvdh", - "type": "github" - } - ], - "time": "2022-02-20T15:07:15+00:00" + "time": "2022-02-23T14:25:13+00:00" }, { "name": "graham-campbell/result-type", - "version": "v1.0.4", + "version": "v1.1.0", "source": { "type": "git", "url": "https://github.com/GrahamCampbell/Result-Type.git", - "reference": "0690bde05318336c7221785f2a932467f98b64ca" + "reference": "a878d45c1914464426dc94da61c9e1d36ae262a8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/0690bde05318336c7221785f2a932467f98b64ca", - "reference": "0690bde05318336c7221785f2a932467f98b64ca", + "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/a878d45c1914464426dc94da61c9e1d36ae262a8", + "reference": "a878d45c1914464426dc94da61c9e1d36ae262a8", "shasum": "" }, "require": { - "php": "^7.0 || ^8.0", - "phpoption/phpoption": "^1.8" + "php": "^7.2.5 || ^8.0", + "phpoption/phpoption": "^1.9" }, "require-dev": { - "phpunit/phpunit": "^6.5.14 || ^7.5.20 || ^8.5.19 || ^9.5.8" + "phpunit/phpunit": "^8.5.28 || ^9.5.21" }, "type": "library", "autoload": { @@ -635,7 +620,7 @@ ], "support": { "issues": "https://github.com/GrahamCampbell/Result-Type/issues", - "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.0.4" + "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.0" }, "funding": [ { @@ -647,26 +632,26 @@ "type": "tidelift" } ], - "time": "2021-11-21T21:41:47+00:00" + "time": "2022-07-30T15:56:11+00:00" }, { "name": "guzzlehttp/guzzle", - "version": "7.4.1", + "version": "7.5.0", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "ee0a041b1760e6a53d2a39c8c34115adc2af2c79" + "reference": "b50a2a1251152e43f6a37f0fa053e730a67d25ba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/ee0a041b1760e6a53d2a39c8c34115adc2af2c79", - "reference": "ee0a041b1760e6a53d2a39c8c34115adc2af2c79", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/b50a2a1251152e43f6a37f0fa053e730a67d25ba", + "reference": "b50a2a1251152e43f6a37f0fa053e730a67d25ba", "shasum": "" }, "require": { "ext-json": "*", "guzzlehttp/promises": "^1.5", - "guzzlehttp/psr7": "^1.8.3 || ^2.1", + "guzzlehttp/psr7": "^1.9 || ^2.4", "php": "^7.2.5 || ^8.0", "psr/http-client": "^1.0", "symfony/deprecation-contracts": "^2.2 || ^3.0" @@ -675,10 +660,10 @@ "psr/http-client-implementation": "1.0" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.4.1", + "bamarni/composer-bin-plugin": "^1.8.1", "ext-curl": "*", "php-http/client-integration-tests": "^3.0", - "phpunit/phpunit": "^8.5.5 || ^9.3.5", + "phpunit/phpunit": "^8.5.29 || ^9.5.23", "psr/log": "^1.1 || ^2.0 || ^3.0" }, "suggest": { @@ -688,8 +673,12 @@ }, "type": "library", "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + }, "branch-alias": { - "dev-master": "7.4-dev" + "dev-master": "7.5-dev" } }, "autoload": { @@ -755,7 +744,7 @@ ], "support": { "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/7.4.1" + "source": "https://github.com/guzzle/guzzle/tree/7.5.0" }, "funding": [ { @@ -771,20 +760,20 @@ "type": "tidelift" } ], - "time": "2021-12-06T18:43:05+00:00" + "time": "2022-08-28T15:39:27+00:00" }, { "name": "guzzlehttp/promises", - "version": "1.5.1", + "version": "1.5.2", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "fe752aedc9fd8fcca3fe7ad05d419d32998a06da" + "reference": "b94b2807d85443f9719887892882d0329d1e2598" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/fe752aedc9fd8fcca3fe7ad05d419d32998a06da", - "reference": "fe752aedc9fd8fcca3fe7ad05d419d32998a06da", + "url": "https://api.github.com/repos/guzzle/promises/zipball/b94b2807d85443f9719887892882d0329d1e2598", + "reference": "b94b2807d85443f9719887892882d0329d1e2598", "shasum": "" }, "require": { @@ -800,12 +789,12 @@ } }, "autoload": { - "psr-4": { - "GuzzleHttp\\Promise\\": "src/" - }, "files": [ "src/functions_include.php" - ] + ], + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -839,7 +828,7 @@ ], "support": { "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/1.5.1" + "source": "https://github.com/guzzle/promises/tree/1.5.2" }, "funding": [ { @@ -855,20 +844,20 @@ "type": "tidelift" } ], - "time": "2021-10-22T20:56:57+00:00" + "time": "2022-08-28T14:55:35+00:00" }, { "name": "guzzlehttp/psr7", - "version": "2.1.0", + "version": "2.4.1", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "089edd38f5b8abba6cb01567c2a8aaa47cec4c72" + "reference": "69568e4293f4fa993f3b0e51c9723e1e17c41379" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/089edd38f5b8abba6cb01567c2a8aaa47cec4c72", - "reference": "089edd38f5b8abba6cb01567c2a8aaa47cec4c72", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/69568e4293f4fa993f3b0e51c9723e1e17c41379", + "reference": "69568e4293f4fa993f3b0e51c9723e1e17c41379", "shasum": "" }, "require": { @@ -882,17 +871,21 @@ "psr/http-message-implementation": "1.0" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.4.1", + "bamarni/composer-bin-plugin": "^1.8.1", "http-interop/http-factory-tests": "^0.9", - "phpunit/phpunit": "^8.5.8 || ^9.3.10" + "phpunit/phpunit": "^8.5.29 || ^9.5.23" }, "suggest": { "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" }, "type": "library", "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + }, "branch-alias": { - "dev-master": "2.1-dev" + "dev-master": "2.4-dev" } }, "autoload": { @@ -954,7 +947,7 @@ ], "support": { "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/2.1.0" + "source": "https://github.com/guzzle/psr7/tree/2.4.1" }, "funding": [ { @@ -970,20 +963,20 @@ "type": "tidelift" } ], - "time": "2021-10-06T17:43:30+00:00" + "time": "2022-08-28T14:45:39+00:00" }, { "name": "laravel/framework", - "version": "v8.83.1", + "version": "v8.83.23", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "bddba117f8bce2f3c9875ca1ca375a96350d0f4d" + "reference": "bdc707f8b9bcad289b24cd182d98ec7480ac4491" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/bddba117f8bce2f3c9875ca1ca375a96350d0f4d", - "reference": "bddba117f8bce2f3c9875ca1ca375a96350d0f4d", + "url": "https://api.github.com/repos/laravel/framework/zipball/bdc707f8b9bcad289b24cd182d98ec7480ac4491", + "reference": "bdc707f8b9bcad289b24cd182d98ec7480ac4491", "shasum": "" }, "require": { @@ -1143,24 +1136,25 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2022-02-15T15:05:20+00:00" + "time": "2022-07-26T13:30:00+00:00" }, { "name": "laravel/sanctum", - "version": "v2.14.1", + "version": "v2.15.1", "source": { "type": "git", "url": "https://github.com/laravel/sanctum.git", - "reference": "89937617fa144ddb759a740861a47c4f2fd2245b" + "reference": "31fbe6f85aee080c4dc2f9b03dc6dd5d0ee72473" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/sanctum/zipball/89937617fa144ddb759a740861a47c4f2fd2245b", - "reference": "89937617fa144ddb759a740861a47c4f2fd2245b", + "url": "https://api.github.com/repos/laravel/sanctum/zipball/31fbe6f85aee080c4dc2f9b03dc6dd5d0ee72473", + "reference": "31fbe6f85aee080c4dc2f9b03dc6dd5d0ee72473", "shasum": "" }, "require": { "ext-json": "*", + "illuminate/console": "^6.9|^7.0|^8.0|^9.0", "illuminate/contracts": "^6.9|^7.0|^8.0|^9.0", "illuminate/database": "^6.9|^7.0|^8.0|^9.0", "illuminate/support": "^6.9|^7.0|^8.0|^9.0", @@ -1207,29 +1201,30 @@ "issues": "https://github.com/laravel/sanctum/issues", "source": "https://github.com/laravel/sanctum" }, - "time": "2022-02-15T08:08:57+00:00" + "time": "2022-04-08T13:39:49+00:00" }, { "name": "laravel/serializable-closure", - "version": "v1.1.1", + "version": "v1.2.2", "source": { "type": "git", "url": "https://github.com/laravel/serializable-closure.git", - "reference": "9e4b005daa20b0c161f3845040046dc9ddc1d74e" + "reference": "47afb7fae28ed29057fdca37e16a84f90cc62fae" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/9e4b005daa20b0c161f3845040046dc9ddc1d74e", - "reference": "9e4b005daa20b0c161f3845040046dc9ddc1d74e", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/47afb7fae28ed29057fdca37e16a84f90cc62fae", + "reference": "47afb7fae28ed29057fdca37e16a84f90cc62fae", "shasum": "" }, "require": { "php": "^7.3|^8.0" }, "require-dev": { - "pestphp/pest": "^1.18", - "phpstan/phpstan": "^0.12.98", - "symfony/var-dumper": "^5.3" + "nesbot/carbon": "^2.61", + "pestphp/pest": "^1.21.3", + "phpstan/phpstan": "^1.8.2", + "symfony/var-dumper": "^5.4.11" }, "type": "library", "extra": { @@ -1266,20 +1261,20 @@ "issues": "https://github.com/laravel/serializable-closure/issues", "source": "https://github.com/laravel/serializable-closure" }, - "time": "2022-02-11T19:23:53+00:00" + "time": "2022-09-08T13:45:54+00:00" }, { "name": "laravel/tinker", - "version": "v2.7.0", + "version": "v2.7.2", "source": { "type": "git", "url": "https://github.com/laravel/tinker.git", - "reference": "5f2f9815b7631b9f586a3de7933c25f9327d4073" + "reference": "dff39b661e827dae6e092412f976658df82dbac5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/tinker/zipball/5f2f9815b7631b9f586a3de7933c25f9327d4073", - "reference": "5f2f9815b7631b9f586a3de7933c25f9327d4073", + "url": "https://api.github.com/repos/laravel/tinker/zipball/dff39b661e827dae6e092412f976658df82dbac5", + "reference": "dff39b661e827dae6e092412f976658df82dbac5", "shasum": "" }, "require": { @@ -1332,22 +1327,22 @@ ], "support": { "issues": "https://github.com/laravel/tinker/issues", - "source": "https://github.com/laravel/tinker/tree/v2.7.0" + "source": "https://github.com/laravel/tinker/tree/v2.7.2" }, - "time": "2022-01-10T08:52:49+00:00" + "time": "2022-03-23T12:38:24+00:00" }, { "name": "league/commonmark", - "version": "2.2.2", + "version": "2.3.5", "source": { "type": "git", "url": "https://github.com/thephpleague/commonmark.git", - "reference": "13d7751377732637814f0cda0e3f6d3243f9f769" + "reference": "84d74485fdb7074f4f9dd6f02ab957b1de513257" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/13d7751377732637814f0cda0e3f6d3243f9f769", - "reference": "13d7751377732637814f0cda0e3f6d3243f9f769", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/84d74485fdb7074f4f9dd6f02ab957b1de513257", + "reference": "84d74485fdb7074f4f9dd6f02ab957b1de513257", "shasum": "" }, "require": { @@ -1356,24 +1351,26 @@ "php": "^7.4 || ^8.0", "psr/event-dispatcher": "^1.0", "symfony/deprecation-contracts": "^2.1 || ^3.0", - "symfony/polyfill-php80": "^1.15" + "symfony/polyfill-php80": "^1.16" }, "require-dev": { "cebe/markdown": "^1.0", "commonmark/cmark": "0.30.0", "commonmark/commonmark.js": "0.30.0", "composer/package-versions-deprecated": "^1.8", + "embed/embed": "^4.4", "erusev/parsedown": "^1.0", "ext-json": "*", "github/gfm": "0.29.0", "michelf/php-markdown": "^1.4", - "phpstan/phpstan": "^0.12.88 || ^1.0.0", - "phpunit/phpunit": "^9.5.5", + "nyholm/psr7": "^1.5", + "phpstan/phpstan": "^1.8.2", + "phpunit/phpunit": "^9.5.21", "scrutinizer/ocular": "^1.8.1", - "symfony/finder": "^5.3", + "symfony/finder": "^5.3 | ^6.0", "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0", - "unleashedtech/php-coding-standard": "^3.1", - "vimeo/psalm": "^4.7.3" + "unleashedtech/php-coding-standard": "^3.1.1", + "vimeo/psalm": "^4.24.0" }, "suggest": { "symfony/yaml": "v2.3+ required if using the Front Matter extension" @@ -1381,7 +1378,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.3-dev" + "dev-main": "2.4-dev" } }, "autoload": { @@ -1438,7 +1435,7 @@ "type": "tidelift" } ], - "time": "2022-02-13T15:00:57+00:00" + "time": "2022-07-29T10:59:45+00:00" }, { "name": "league/config", @@ -1618,16 +1615,16 @@ }, { "name": "league/mime-type-detection", - "version": "1.9.0", + "version": "1.11.0", "source": { "type": "git", "url": "https://github.com/thephpleague/mime-type-detection.git", - "reference": "aa70e813a6ad3d1558fc927863d47309b4c23e69" + "reference": "ff6248ea87a9f116e78edd6002e39e5128a0d4dd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/aa70e813a6ad3d1558fc927863d47309b4c23e69", - "reference": "aa70e813a6ad3d1558fc927863d47309b4c23e69", + "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/ff6248ea87a9f116e78edd6002e39e5128a0d4dd", + "reference": "ff6248ea87a9f116e78edd6002e39e5128a0d4dd", "shasum": "" }, "require": { @@ -1658,7 +1655,7 @@ "description": "Mime-type detection for Flysystem", "support": { "issues": "https://github.com/thephpleague/mime-type-detection/issues", - "source": "https://github.com/thephpleague/mime-type-detection/tree/1.9.0" + "source": "https://github.com/thephpleague/mime-type-detection/tree/1.11.0" }, "funding": [ { @@ -1670,20 +1667,20 @@ "type": "tidelift" } ], - "time": "2021-11-21T11:48:40+00:00" + "time": "2022-04-17T13:12:02+00:00" }, { "name": "monolog/monolog", - "version": "2.3.5", + "version": "2.8.0", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "fd4380d6fc37626e2f799f29d91195040137eba9" + "reference": "720488632c590286b88b80e62aa3d3d551ad4a50" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/fd4380d6fc37626e2f799f29d91195040137eba9", - "reference": "fd4380d6fc37626e2f799f29d91195040137eba9", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/720488632c590286b88b80e62aa3d3d551ad4a50", + "reference": "720488632c590286b88b80e62aa3d3d551ad4a50", "shasum": "" }, "require": { @@ -1696,18 +1693,22 @@ "require-dev": { "aws/aws-sdk-php": "^2.4.9 || ^3.0", "doctrine/couchdb": "~1.0@dev", - "elasticsearch/elasticsearch": "^7", + "elasticsearch/elasticsearch": "^7 || ^8", + "ext-json": "*", "graylog2/gelf-php": "^1.4.2", + "guzzlehttp/guzzle": "^7.4", + "guzzlehttp/psr7": "^2.2", "mongodb/mongodb": "^1.8", "php-amqplib/php-amqplib": "~2.4 || ^3", - "php-console/php-console": "^3.1.3", - "phpspec/prophecy": "^1.6.1", + "phpspec/prophecy": "^1.15", "phpstan/phpstan": "^0.12.91", - "phpunit/phpunit": "^8.5", - "predis/predis": "^1.1", - "rollbar/rollbar": "^1.3", - "ruflin/elastica": ">=0.90@dev", - "swiftmailer/swiftmailer": "^5.3|^6.0" + "phpunit/phpunit": "^8.5.14", + "predis/predis": "^1.1 || ^2.0", + "rollbar/rollbar": "^1.3 || ^2 || ^3", + "ruflin/elastica": "^7", + "swiftmailer/swiftmailer": "^5.3|^6.0", + "symfony/mailer": "^5.4 || ^6", + "symfony/mime": "^5.4 || ^6" }, "suggest": { "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", @@ -1722,7 +1723,6 @@ "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)", "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", - "php-console/php-console": "Allow sending log messages to Google Chrome", "rollbar/rollbar": "Allow sending log messages to Rollbar", "ruflin/elastica": "Allow sending log messages to an Elastic Search server" }, @@ -1757,7 +1757,7 @@ ], "support": { "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/2.3.5" + "source": "https://github.com/Seldaek/monolog/tree/2.8.0" }, "funding": [ { @@ -1769,20 +1769,20 @@ "type": "tidelift" } ], - "time": "2021-10-01T21:08:31+00:00" + "time": "2022-07-24T11:55:47+00:00" }, { "name": "nesbot/carbon", - "version": "2.57.0", + "version": "2.62.1", "source": { "type": "git", "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "4a54375c21eea4811dbd1149fe6b246517554e78" + "reference": "01bc4cdefe98ef58d1f9cb31bdbbddddf2a88f7a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/4a54375c21eea4811dbd1149fe6b246517554e78", - "reference": "4a54375c21eea4811dbd1149fe6b246517554e78", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/01bc4cdefe98ef58d1f9cb31bdbbddddf2a88f7a", + "reference": "01bc4cdefe98ef58d1f9cb31bdbbddddf2a88f7a", "shasum": "" }, "require": { @@ -1797,10 +1797,12 @@ "doctrine/orm": "^2.7", "friendsofphp/php-cs-fixer": "^3.0", "kylekatarnls/multi-tester": "^2.0", + "ondrejmirtes/better-reflection": "*", "phpmd/phpmd": "^2.9", "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^0.12.54 || ^1.0", - "phpunit/phpunit": "^7.5.20 || ^8.5.14", + "phpstan/phpstan": "^0.12.99 || ^1.7.14", + "phpunit/php-file-iterator": "^2.0.5 || ^3.0.6", + "phpunit/phpunit": "^7.5.20 || ^8.5.26 || ^9.5.20", "squizlabs/php_codesniffer": "^3.4" }, "bin": [ @@ -1857,15 +1859,19 @@ }, "funding": [ { - "url": "https://opencollective.com/Carbon", - "type": "open_collective" + "url": "https://github.com/sponsors/kylekatarnls", + "type": "github" + }, + { + "url": "https://opencollective.com/Carbon#sponsor", + "type": "opencollective" }, { - "url": "https://tidelift.com/funding/github/packagist/nesbot/carbon", + "url": "https://tidelift.com/subscription/pkg/packagist-nesbot-carbon?utm_source=packagist-nesbot-carbon&utm_medium=referral&utm_campaign=readme", "type": "tidelift" } ], - "time": "2022-02-13T18:13:33+00:00" + "time": "2022-09-02T07:48:13+00:00" }, { "name": "nette/schema", @@ -1931,20 +1937,20 @@ }, { "name": "nette/utils", - "version": "v3.2.7", + "version": "v3.2.8", "source": { "type": "git", "url": "https://github.com/nette/utils.git", - "reference": "0af4e3de4df9f1543534beab255ccf459e7a2c99" + "reference": "02a54c4c872b99e4ec05c4aec54b5a06eb0f6368" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/utils/zipball/0af4e3de4df9f1543534beab255ccf459e7a2c99", - "reference": "0af4e3de4df9f1543534beab255ccf459e7a2c99", + "url": "https://api.github.com/repos/nette/utils/zipball/02a54c4c872b99e4ec05c4aec54b5a06eb0f6368", + "reference": "02a54c4c872b99e4ec05c4aec54b5a06eb0f6368", "shasum": "" }, "require": { - "php": ">=7.2 <8.2" + "php": ">=7.2 <8.3" }, "conflict": { "nette/di": "<3.0.6" @@ -2010,22 +2016,22 @@ ], "support": { "issues": "https://github.com/nette/utils/issues", - "source": "https://github.com/nette/utils/tree/v3.2.7" + "source": "https://github.com/nette/utils/tree/v3.2.8" }, - "time": "2022-01-24T11:29:14+00:00" + "time": "2022-09-12T23:36:20+00:00" }, { "name": "nikic/php-parser", - "version": "v4.13.2", + "version": "v4.15.1", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "210577fe3cf7badcc5814d99455df46564f3c077" + "reference": "0ef6c55a3f47f89d7a374e6f835197a0b5fcf900" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/210577fe3cf7badcc5814d99455df46564f3c077", - "reference": "210577fe3cf7badcc5814d99455df46564f3c077", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/0ef6c55a3f47f89d7a374e6f835197a0b5fcf900", + "reference": "0ef6c55a3f47f89d7a374e6f835197a0b5fcf900", "shasum": "" }, "require": { @@ -2066,9 +2072,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.13.2" + "source": "https://github.com/nikic/PHP-Parser/tree/v4.15.1" }, - "time": "2021-11-30T19:35:32+00:00" + "time": "2022-09-04T07:30:47+00:00" }, { "name": "opis/closure", @@ -2098,12 +2104,12 @@ } }, "autoload": { - "psr-4": { - "Opis\\Closure\\": "src/" - }, "files": [ "functions.php" - ] + ], + "psr-4": { + "Opis\\Closure\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -2137,29 +2143,33 @@ }, { "name": "phpoption/phpoption", - "version": "1.8.1", + "version": "1.9.0", "source": { "type": "git", "url": "https://github.com/schmittjoh/php-option.git", - "reference": "eab7a0df01fe2344d172bff4cd6dbd3f8b84ad15" + "reference": "dc5ff11e274a90cc1c743f66c9ad700ce50db9ab" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/eab7a0df01fe2344d172bff4cd6dbd3f8b84ad15", - "reference": "eab7a0df01fe2344d172bff4cd6dbd3f8b84ad15", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/dc5ff11e274a90cc1c743f66c9ad700ce50db9ab", + "reference": "dc5ff11e274a90cc1c743f66c9ad700ce50db9ab", "shasum": "" }, "require": { - "php": "^7.0 || ^8.0" + "php": "^7.2.5 || ^8.0" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.4.1", - "phpunit/phpunit": "^6.5.14 || ^7.5.20 || ^8.5.19 || ^9.5.8" + "bamarni/composer-bin-plugin": "^1.8", + "phpunit/phpunit": "^8.5.28 || ^9.5.21" }, "type": "library", "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": true + }, "branch-alias": { - "dev-master": "1.8-dev" + "dev-master": "1.9-dev" } }, "autoload": { @@ -2192,7 +2202,7 @@ ], "support": { "issues": "https://github.com/schmittjoh/php-option/issues", - "source": "https://github.com/schmittjoh/php-option/tree/1.8.1" + "source": "https://github.com/schmittjoh/php-option/tree/1.9.0" }, "funding": [ { @@ -2204,7 +2214,7 @@ "type": "tidelift" } ], - "time": "2021-12-04T23:24:31+00:00" + "time": "2022-07-30T15:51:26+00:00" }, { "name": "psr/container", @@ -2567,16 +2577,16 @@ }, { "name": "psy/psysh", - "version": "v0.11.1", + "version": "v0.11.8", "source": { "type": "git", "url": "https://github.com/bobthecow/psysh.git", - "reference": "570292577277f06f590635381a7f761a6cf4f026" + "reference": "f455acf3645262ae389b10e9beba0c358aa6994e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bobthecow/psysh/zipball/570292577277f06f590635381a7f761a6cf4f026", - "reference": "570292577277f06f590635381a7f761a6cf4f026", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/f455acf3645262ae389b10e9beba0c358aa6994e", + "reference": "f455acf3645262ae389b10e9beba0c358aa6994e", "shasum": "" }, "require": { @@ -2587,16 +2597,17 @@ "symfony/console": "^6.0 || ^5.0 || ^4.0 || ^3.4", "symfony/var-dumper": "^6.0 || ^5.0 || ^4.0 || ^3.4" }, + "conflict": { + "symfony/console": "4.4.37 || 5.3.14 || 5.3.15 || 5.4.3 || 5.4.4 || 6.0.3 || 6.0.4" + }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.2", - "hoa/console": "3.17.05.02" + "bamarni/composer-bin-plugin": "^1.2" }, "suggest": { "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)", "ext-pdo-sqlite": "The doc command requires SQLite to work.", "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well.", - "ext-readline": "Enables support for arrow-key history navigation, and showing and manipulating command history.", - "hoa/console": "A pure PHP readline implementation. You'll want this if your PHP install doesn't already support readline or libedit." + "ext-readline": "Enables support for arrow-key history navigation, and showing and manipulating command history." }, "bin": [ "bin/psysh" @@ -2636,9 +2647,9 @@ ], "support": { "issues": "https://github.com/bobthecow/psysh/issues", - "source": "https://github.com/bobthecow/psysh/tree/v0.11.1" + "source": "https://github.com/bobthecow/psysh/tree/v0.11.8" }, - "time": "2022-01-03T13:58:38+00:00" + "time": "2022-07-28T14:25:11+00:00" }, { "name": "ralouphie/getallheaders", @@ -2828,12 +2839,12 @@ } }, "autoload": { - "psr-4": { - "Ramsey\\Uuid\\": "src/" - }, "files": [ "src/functions.php" - ] + ], + "psr-4": { + "Ramsey\\Uuid\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -2939,16 +2950,16 @@ }, { "name": "symfony/console", - "version": "v5.4.3", + "version": "v5.4.12", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "a2a86ec353d825c75856c6fd14fac416a7bdb6b8" + "reference": "c072aa8f724c3af64e2c7a96b796a4863d24dba1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/a2a86ec353d825c75856c6fd14fac416a7bdb6b8", - "reference": "a2a86ec353d825c75856c6fd14fac416a7bdb6b8", + "url": "https://api.github.com/repos/symfony/console/zipball/c072aa8f724c3af64e2c7a96b796a4863d24dba1", + "reference": "c072aa8f724c3af64e2c7a96b796a4863d24dba1", "shasum": "" }, "require": { @@ -3018,7 +3029,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v5.4.3" + "source": "https://github.com/symfony/console/tree/v5.4.12" }, "funding": [ { @@ -3034,20 +3045,20 @@ "type": "tidelift" } ], - "time": "2022-01-26T16:28:35+00:00" + "time": "2022-08-17T13:18:05+00:00" }, { "name": "symfony/css-selector", - "version": "v5.4.3", + "version": "v5.4.11", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "b0a190285cd95cb019237851205b8140ef6e368e" + "reference": "c1681789f059ab756001052164726ae88512ae3d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/b0a190285cd95cb019237851205b8140ef6e368e", - "reference": "b0a190285cd95cb019237851205b8140ef6e368e", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/c1681789f059ab756001052164726ae88512ae3d", + "reference": "c1681789f059ab756001052164726ae88512ae3d", "shasum": "" }, "require": { @@ -3084,7 +3095,7 @@ "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/css-selector/tree/v5.4.3" + "source": "https://github.com/symfony/css-selector/tree/v5.4.11" }, "funding": [ { @@ -3100,20 +3111,20 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:53:40+00:00" + "time": "2022-06-27T16:58:25+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v2.5.0", + "version": "v2.5.2", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "6f981ee24cf69ee7ce9736146d1c57c2780598a8" + "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/6f981ee24cf69ee7ce9736146d1c57c2780598a8", - "reference": "6f981ee24cf69ee7ce9736146d1c57c2780598a8", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/e8b495ea28c1d97b5e0c121748d6f9b53d075c66", + "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66", "shasum": "" }, "require": { @@ -3151,7 +3162,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.0" + "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.2" }, "funding": [ { @@ -3167,20 +3178,20 @@ "type": "tidelift" } ], - "time": "2021-07-12T14:48:14+00:00" + "time": "2022-01-02T09:53:40+00:00" }, { "name": "symfony/error-handler", - "version": "v5.4.3", + "version": "v5.4.11", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "c4ffc2cd919950d13c8c9ce32a70c70214c3ffc5" + "reference": "f75d17cb4769eb38cd5fccbda95cd80a054d35c8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/c4ffc2cd919950d13c8c9ce32a70c70214c3ffc5", - "reference": "c4ffc2cd919950d13c8c9ce32a70c70214c3ffc5", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/f75d17cb4769eb38cd5fccbda95cd80a054d35c8", + "reference": "f75d17cb4769eb38cd5fccbda95cd80a054d35c8", "shasum": "" }, "require": { @@ -3222,7 +3233,7 @@ "description": "Provides tools to manage errors and ease debugging PHP code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/error-handler/tree/v5.4.3" + "source": "https://github.com/symfony/error-handler/tree/v5.4.11" }, "funding": [ { @@ -3238,20 +3249,20 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:53:40+00:00" + "time": "2022-07-29T07:37:50+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v5.4.3", + "version": "v5.4.9", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "dec8a9f58d20df252b9cd89f1c6c1530f747685d" + "reference": "8e6ce1cc0279e3ff3c8ff0f43813bc88d21ca1bc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/dec8a9f58d20df252b9cd89f1c6c1530f747685d", - "reference": "dec8a9f58d20df252b9cd89f1c6c1530f747685d", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/8e6ce1cc0279e3ff3c8ff0f43813bc88d21ca1bc", + "reference": "8e6ce1cc0279e3ff3c8ff0f43813bc88d21ca1bc", "shasum": "" }, "require": { @@ -3307,7 +3318,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v5.4.3" + "source": "https://github.com/symfony/event-dispatcher/tree/v5.4.9" }, "funding": [ { @@ -3323,20 +3334,20 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:53:40+00:00" + "time": "2022-05-05T16:45:39+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v2.5.0", + "version": "v2.5.2", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "66bea3b09be61613cd3b4043a65a8ec48cfa6d2a" + "reference": "f98b54df6ad059855739db6fcbc2d36995283fe1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/66bea3b09be61613cd3b4043a65a8ec48cfa6d2a", - "reference": "66bea3b09be61613cd3b4043a65a8ec48cfa6d2a", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/f98b54df6ad059855739db6fcbc2d36995283fe1", + "reference": "f98b54df6ad059855739db6fcbc2d36995283fe1", "shasum": "" }, "require": { @@ -3386,7 +3397,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v2.5.0" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v2.5.2" }, "funding": [ { @@ -3402,20 +3413,20 @@ "type": "tidelift" } ], - "time": "2021-07-12T14:48:14+00:00" + "time": "2022-01-02T09:53:40+00:00" }, { "name": "symfony/finder", - "version": "v5.4.3", + "version": "v5.4.11", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "231313534dded84c7ecaa79d14bc5da4ccb69b7d" + "reference": "7872a66f57caffa2916a584db1aa7f12adc76f8c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/231313534dded84c7ecaa79d14bc5da4ccb69b7d", - "reference": "231313534dded84c7ecaa79d14bc5da4ccb69b7d", + "url": "https://api.github.com/repos/symfony/finder/zipball/7872a66f57caffa2916a584db1aa7f12adc76f8c", + "reference": "7872a66f57caffa2916a584db1aa7f12adc76f8c", "shasum": "" }, "require": { @@ -3449,7 +3460,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v5.4.3" + "source": "https://github.com/symfony/finder/tree/v5.4.11" }, "funding": [ { @@ -3465,20 +3476,20 @@ "type": "tidelift" } ], - "time": "2022-01-26T16:34:36+00:00" + "time": "2022-07-29T07:37:50+00:00" }, { "name": "symfony/http-foundation", - "version": "v5.4.3", + "version": "v5.4.12", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "ef409ff341a565a3663157d4324536746d49a0c7" + "reference": "f4bfe9611b113b15d98a43da68ec9b5a00d56791" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/ef409ff341a565a3663157d4324536746d49a0c7", - "reference": "ef409ff341a565a3663157d4324536746d49a0c7", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/f4bfe9611b113b15d98a43da68ec9b5a00d56791", + "reference": "f4bfe9611b113b15d98a43da68ec9b5a00d56791", "shasum": "" }, "require": { @@ -3490,8 +3501,11 @@ "require-dev": { "predis/predis": "~1.0", "symfony/cache": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", "symfony/expression-language": "^4.4|^5.0|^6.0", - "symfony/mime": "^4.4|^5.0|^6.0" + "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4", + "symfony/mime": "^4.4|^5.0|^6.0", + "symfony/rate-limiter": "^5.2|^6.0" }, "suggest": { "symfony/mime": "To use the file extension guesser" @@ -3522,7 +3536,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v5.4.3" + "source": "https://github.com/symfony/http-foundation/tree/v5.4.12" }, "funding": [ { @@ -3538,20 +3552,20 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:53:40+00:00" + "time": "2022-08-19T07:33:17+00:00" }, { "name": "symfony/http-kernel", - "version": "v5.4.4", + "version": "v5.4.12", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "49f40347228c773688a0488feea0175aa7f4d268" + "reference": "37f660fa3bcd78fe4893ce23ebe934618ec099be" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/49f40347228c773688a0488feea0175aa7f4d268", - "reference": "49f40347228c773688a0488feea0175aa7f4d268", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/37f660fa3bcd78fe4893ce23ebe934618ec099be", + "reference": "37f660fa3bcd78fe4893ce23ebe934618ec099be", "shasum": "" }, "require": { @@ -3634,7 +3648,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v5.4.4" + "source": "https://github.com/symfony/http-kernel/tree/v5.4.12" }, "funding": [ { @@ -3650,20 +3664,20 @@ "type": "tidelift" } ], - "time": "2022-01-29T18:08:07+00:00" + "time": "2022-08-26T14:40:40+00:00" }, { "name": "symfony/mime", - "version": "v5.4.3", + "version": "v5.4.12", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "e1503cfb5c9a225350f549d3bb99296f4abfb80f" + "reference": "03876e9c5a36f5b45e7d9a381edda5421eff8a90" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/e1503cfb5c9a225350f549d3bb99296f4abfb80f", - "reference": "e1503cfb5c9a225350f549d3bb99296f4abfb80f", + "url": "https://api.github.com/repos/symfony/mime/zipball/03876e9c5a36f5b45e7d9a381edda5421eff8a90", + "reference": "03876e9c5a36f5b45e7d9a381edda5421eff8a90", "shasum": "" }, "require": { @@ -3717,7 +3731,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v5.4.3" + "source": "https://github.com/symfony/mime/tree/v5.4.12" }, "funding": [ { @@ -3733,20 +3747,20 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:53:40+00:00" + "time": "2022-08-19T14:24:03+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.24.0", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "30885182c981ab175d4d034db0f6f469898070ab" + "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/30885182c981ab175d4d034db0f6f469898070ab", - "reference": "30885182c981ab175d4d034db0f6f469898070ab", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", + "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", "shasum": "" }, "require": { @@ -3761,7 +3775,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -3769,12 +3783,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" - }, "files": [ "bootstrap.php" - ] + ], + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3799,7 +3813,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.26.0" }, "funding": [ { @@ -3815,20 +3829,20 @@ "type": "tidelift" } ], - "time": "2021-10-20T20:35:02+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { "name": "symfony/polyfill-iconv", - "version": "v1.24.0", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-iconv.git", - "reference": "f1aed619e28cb077fc83fac8c4c0383578356e40" + "reference": "143f1881e655bebca1312722af8068de235ae5dc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/f1aed619e28cb077fc83fac8c4c0383578356e40", - "reference": "f1aed619e28cb077fc83fac8c4c0383578356e40", + "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/143f1881e655bebca1312722af8068de235ae5dc", + "reference": "143f1881e655bebca1312722af8068de235ae5dc", "shasum": "" }, "require": { @@ -3843,7 +3857,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -3882,7 +3896,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-iconv/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-iconv/tree/v1.26.0" }, "funding": [ { @@ -3898,20 +3912,20 @@ "type": "tidelift" } ], - "time": "2022-01-04T09:04:05+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.24.0", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "81b86b50cf841a64252b439e738e97f4a34e2783" + "reference": "433d05519ce6990bf3530fba6957499d327395c2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/81b86b50cf841a64252b439e738e97f4a34e2783", - "reference": "81b86b50cf841a64252b439e738e97f4a34e2783", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/433d05519ce6990bf3530fba6957499d327395c2", + "reference": "433d05519ce6990bf3530fba6957499d327395c2", "shasum": "" }, "require": { @@ -3923,7 +3937,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -3963,7 +3977,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.26.0" }, "funding": [ { @@ -3979,20 +3993,20 @@ "type": "tidelift" } ], - "time": "2021-11-23T21:10:46+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.24.0", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "749045c69efb97c70d25d7463abba812e91f3a44" + "reference": "59a8d271f00dd0e4c2e518104cc7963f655a1aa8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/749045c69efb97c70d25d7463abba812e91f3a44", - "reference": "749045c69efb97c70d25d7463abba812e91f3a44", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/59a8d271f00dd0e4c2e518104cc7963f655a1aa8", + "reference": "59a8d271f00dd0e4c2e518104cc7963f655a1aa8", "shasum": "" }, "require": { @@ -4006,7 +4020,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -4050,7 +4064,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.26.0" }, "funding": [ { @@ -4066,20 +4080,20 @@ "type": "tidelift" } ], - "time": "2021-09-14T14:02:44+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.24.0", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8" + "reference": "219aa369ceff116e673852dce47c3a41794c14bd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8590a5f561694770bdcd3f9b5c69dde6945028e8", - "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/219aa369ceff116e673852dce47c3a41794c14bd", + "reference": "219aa369ceff116e673852dce47c3a41794c14bd", "shasum": "" }, "require": { @@ -4091,7 +4105,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -4134,7 +4148,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.26.0" }, "funding": [ { @@ -4150,20 +4164,20 @@ "type": "tidelift" } ], - "time": "2021-02-19T12:13:01+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.24.0", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825" + "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/0abb51d2f102e00a4eefcf46ba7fec406d245825", - "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", + "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", "shasum": "" }, "require": { @@ -4178,7 +4192,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -4217,7 +4231,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.26.0" }, "funding": [ { @@ -4233,20 +4247,20 @@ "type": "tidelift" } ], - "time": "2021-11-30T18:21:41+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { "name": "symfony/polyfill-php72", - "version": "v1.24.0", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "9a142215a36a3888e30d0a9eeea9766764e96976" + "reference": "bf44a9fd41feaac72b074de600314a93e2ae78e2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/9a142215a36a3888e30d0a9eeea9766764e96976", - "reference": "9a142215a36a3888e30d0a9eeea9766764e96976", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/bf44a9fd41feaac72b074de600314a93e2ae78e2", + "reference": "bf44a9fd41feaac72b074de600314a93e2ae78e2", "shasum": "" }, "require": { @@ -4255,7 +4269,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -4293,7 +4307,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php72/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-php72/tree/v1.26.0" }, "funding": [ { @@ -4309,20 +4323,20 @@ "type": "tidelift" } ], - "time": "2021-05-27T09:17:38+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { "name": "symfony/polyfill-php73", - "version": "v1.24.0", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "cc5db0e22b3cb4111010e48785a97f670b350ca5" + "reference": "e440d35fa0286f77fb45b79a03fedbeda9307e85" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/cc5db0e22b3cb4111010e48785a97f670b350ca5", - "reference": "cc5db0e22b3cb4111010e48785a97f670b350ca5", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/e440d35fa0286f77fb45b79a03fedbeda9307e85", + "reference": "e440d35fa0286f77fb45b79a03fedbeda9307e85", "shasum": "" }, "require": { @@ -4331,7 +4345,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -4372,7 +4386,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php73/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-php73/tree/v1.26.0" }, "funding": [ { @@ -4388,20 +4402,20 @@ "type": "tidelift" } ], - "time": "2021-06-05T21:20:04+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.24.0", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "57b712b08eddb97c762a8caa32c84e037892d2e9" + "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/57b712b08eddb97c762a8caa32c84e037892d2e9", - "reference": "57b712b08eddb97c762a8caa32c84e037892d2e9", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/cfa0ae98841b9e461207c13ab093d76b0fa7bace", + "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace", "shasum": "" }, "require": { @@ -4410,7 +4424,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -4455,7 +4469,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.26.0" }, "funding": [ { @@ -4471,20 +4485,20 @@ "type": "tidelift" } ], - "time": "2021-09-13T13:58:33+00:00" + "time": "2022-05-10T07:21:04+00:00" }, { "name": "symfony/polyfill-php81", - "version": "v1.24.0", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "5de4ba2d41b15f9bd0e19b2ab9674135813ec98f" + "reference": "13f6d1271c663dc5ae9fb843a8f16521db7687a1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/5de4ba2d41b15f9bd0e19b2ab9674135813ec98f", - "reference": "5de4ba2d41b15f9bd0e19b2ab9674135813ec98f", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/13f6d1271c663dc5ae9fb843a8f16521db7687a1", + "reference": "13f6d1271c663dc5ae9fb843a8f16521db7687a1", "shasum": "" }, "require": { @@ -4493,7 +4507,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -4534,7 +4548,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-php81/tree/v1.26.0" }, "funding": [ { @@ -4550,20 +4564,20 @@ "type": "tidelift" } ], - "time": "2021-09-13T13:58:11+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { "name": "symfony/process", - "version": "v5.4.3", + "version": "v5.4.11", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "553f50487389a977eb31cf6b37faae56da00f753" + "reference": "6e75fe6874cbc7e4773d049616ab450eff537bf1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/553f50487389a977eb31cf6b37faae56da00f753", - "reference": "553f50487389a977eb31cf6b37faae56da00f753", + "url": "https://api.github.com/repos/symfony/process/zipball/6e75fe6874cbc7e4773d049616ab450eff537bf1", + "reference": "6e75fe6874cbc7e4773d049616ab450eff537bf1", "shasum": "" }, "require": { @@ -4596,7 +4610,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v5.4.3" + "source": "https://github.com/symfony/process/tree/v5.4.11" }, "funding": [ { @@ -4612,20 +4626,20 @@ "type": "tidelift" } ], - "time": "2022-01-26T16:28:35+00:00" + "time": "2022-06-27T16:58:25+00:00" }, { "name": "symfony/routing", - "version": "v5.4.3", + "version": "v5.4.11", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "44b29c7a94e867ccde1da604792f11a469958981" + "reference": "3e01ccd9b2a3a4167ba2b3c53612762300300226" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/44b29c7a94e867ccde1da604792f11a469958981", - "reference": "44b29c7a94e867ccde1da604792f11a469958981", + "url": "https://api.github.com/repos/symfony/routing/zipball/3e01ccd9b2a3a4167ba2b3c53612762300300226", + "reference": "3e01ccd9b2a3a4167ba2b3c53612762300300226", "shasum": "" }, "require": { @@ -4686,7 +4700,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v5.4.3" + "source": "https://github.com/symfony/routing/tree/v5.4.11" }, "funding": [ { @@ -4702,26 +4716,26 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:53:40+00:00" + "time": "2022-07-20T13:00:38+00:00" }, { "name": "symfony/service-contracts", - "version": "v2.5.0", + "version": "v2.5.2", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc" + "reference": "4b426aac47d6427cc1a1d0f7e2ac724627f5966c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc", - "reference": "1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/4b426aac47d6427cc1a1d0f7e2ac724627f5966c", + "reference": "4b426aac47d6427cc1a1d0f7e2ac724627f5966c", "shasum": "" }, "require": { "php": ">=7.2.5", "psr/container": "^1.1", - "symfony/deprecation-contracts": "^2.1" + "symfony/deprecation-contracts": "^2.1|^3" }, "conflict": { "ext-psr": "<1.1|>=2" @@ -4769,7 +4783,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v2.5.0" + "source": "https://github.com/symfony/service-contracts/tree/v2.5.2" }, "funding": [ { @@ -4785,20 +4799,20 @@ "type": "tidelift" } ], - "time": "2021-11-04T16:48:04+00:00" + "time": "2022-05-30T19:17:29+00:00" }, { "name": "symfony/string", - "version": "v5.4.3", + "version": "v5.4.12", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "92043b7d8383e48104e411bc9434b260dbeb5a10" + "reference": "2fc515e512d721bf31ea76bd02fe23ada4640058" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/92043b7d8383e48104e411bc9434b260dbeb5a10", - "reference": "92043b7d8383e48104e411bc9434b260dbeb5a10", + "url": "https://api.github.com/repos/symfony/string/zipball/2fc515e512d721bf31ea76bd02fe23ada4640058", + "reference": "2fc515e512d721bf31ea76bd02fe23ada4640058", "shasum": "" }, "require": { @@ -4820,12 +4834,12 @@ }, "type": "library", "autoload": { - "psr-4": { - "Symfony\\Component\\String\\": "" - }, "files": [ "Resources/functions.php" ], + "psr-4": { + "Symfony\\Component\\String\\": "" + }, "exclude-from-classmap": [ "/Tests/" ] @@ -4855,7 +4869,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v5.4.3" + "source": "https://github.com/symfony/string/tree/v5.4.12" }, "funding": [ { @@ -4871,20 +4885,20 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:53:40+00:00" + "time": "2022-08-12T17:03:11+00:00" }, { "name": "symfony/translation", - "version": "v5.4.3", + "version": "v5.4.12", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "a9dd7403232c61e87e27fb306bbcd1627f245d70" + "reference": "42ecc77eb4f229ce2df702a648ec93b8478d76ae" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/a9dd7403232c61e87e27fb306bbcd1627f245d70", - "reference": "a9dd7403232c61e87e27fb306bbcd1627f245d70", + "url": "https://api.github.com/repos/symfony/translation/zipball/42ecc77eb4f229ce2df702a648ec93b8478d76ae", + "reference": "42ecc77eb4f229ce2df702a648ec93b8478d76ae", "shasum": "" }, "require": { @@ -4952,7 +4966,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v5.4.3" + "source": "https://github.com/symfony/translation/tree/v5.4.12" }, "funding": [ { @@ -4968,20 +4982,20 @@ "type": "tidelift" } ], - "time": "2022-01-07T00:28:17+00:00" + "time": "2022-08-02T15:52:22+00:00" }, { "name": "symfony/translation-contracts", - "version": "v2.5.0", + "version": "v2.5.2", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "d28150f0f44ce854e942b671fc2620a98aae1b1e" + "reference": "136b19dd05cdf0709db6537d058bcab6dd6e2dbe" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/d28150f0f44ce854e942b671fc2620a98aae1b1e", - "reference": "d28150f0f44ce854e942b671fc2620a98aae1b1e", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/136b19dd05cdf0709db6537d058bcab6dd6e2dbe", + "reference": "136b19dd05cdf0709db6537d058bcab6dd6e2dbe", "shasum": "" }, "require": { @@ -5030,7 +5044,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v2.5.0" + "source": "https://github.com/symfony/translation-contracts/tree/v2.5.2" }, "funding": [ { @@ -5046,20 +5060,20 @@ "type": "tidelift" } ], - "time": "2021-08-17T14:20:01+00:00" + "time": "2022-06-27T16:58:25+00:00" }, { "name": "symfony/var-dumper", - "version": "v5.4.3", + "version": "v5.4.11", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "970a01f208bf895c5f327ba40b72288da43adec4" + "reference": "b8f306d7b8ef34fb3db3305be97ba8e088fb4861" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/970a01f208bf895c5f327ba40b72288da43adec4", - "reference": "970a01f208bf895c5f327ba40b72288da43adec4", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/b8f306d7b8ef34fb3db3305be97ba8e088fb4861", + "reference": "b8f306d7b8ef34fb3db3305be97ba8e088fb4861", "shasum": "" }, "require": { @@ -5119,7 +5133,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v5.4.3" + "source": "https://github.com/symfony/var-dumper/tree/v5.4.11" }, "funding": [ { @@ -5135,20 +5149,20 @@ "type": "tidelift" } ], - "time": "2022-01-17T16:30:37+00:00" + "time": "2022-07-20T13:00:38+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", - "version": "2.2.4", + "version": "2.2.5", "source": { "type": "git", "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", - "reference": "da444caae6aca7a19c0c140f68c6182e337d5b1c" + "reference": "4348a3a06651827a27d989ad1d13efec6bb49b19" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/da444caae6aca7a19c0c140f68c6182e337d5b1c", - "reference": "da444caae6aca7a19c0c140f68c6182e337d5b1c", + "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/4348a3a06651827a27d989ad1d13efec6bb49b19", + "reference": "4348a3a06651827a27d989ad1d13efec6bb49b19", "shasum": "" }, "require": { @@ -5186,9 +5200,9 @@ "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles", "support": { "issues": "https://github.com/tijsverkoyen/CssToInlineStyles/issues", - "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/2.2.4" + "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/2.2.5" }, - "time": "2021-12-08T09:12:39+00:00" + "time": "2022-09-12T13:28:28+00:00" }, { "name": "vlucas/phpdotenv", @@ -5346,21 +5360,21 @@ }, { "name": "webmozart/assert", - "version": "1.10.0", + "version": "1.11.0", "source": { "type": "git", "url": "https://github.com/webmozarts/assert.git", - "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25" + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25", - "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0", - "symfony/polyfill-ctype": "^1.8" + "ext-ctype": "*", + "php": "^7.2 || ^8.0" }, "conflict": { "phpstan/phpstan": "<0.12.20", @@ -5398,37 +5412,38 @@ ], "support": { "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/1.10.0" + "source": "https://github.com/webmozarts/assert/tree/1.11.0" }, - "time": "2021-03-09T10:59:23+00:00" + "time": "2022-06-03T18:03:27+00:00" } ], "packages-dev": [ { "name": "doctrine/instantiator", - "version": "1.4.0", + "version": "1.4.1", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", - "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b" + "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/d56bf6102915de5702778fe20f2de3b2fe570b5b", - "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/10dcfce151b967d20fde1b34ae6640712c3891bc", + "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc", "shasum": "" }, "require": { "php": "^7.1 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^8.0", + "doctrine/coding-standard": "^9", "ext-pdo": "*", "ext-phar": "*", - "phpbench/phpbench": "^0.13 || 1.0.0-alpha2", - "phpstan/phpstan": "^0.12", - "phpstan/phpstan-phpunit": "^0.12", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" + "phpbench/phpbench": "^0.16 || ^1", + "phpstan/phpstan": "^1.4", + "phpstan/phpstan-phpunit": "^1", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "vimeo/psalm": "^4.22" }, "type": "library", "autoload": { @@ -5455,7 +5470,7 @@ ], "support": { "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/1.4.0" + "source": "https://github.com/doctrine/instantiator/tree/1.4.1" }, "funding": [ { @@ -5471,20 +5486,20 @@ "type": "tidelift" } ], - "time": "2020-11-10T18:47:58+00:00" + "time": "2022-03-03T08:28:38+00:00" }, { "name": "facade/flare-client-php", - "version": "1.9.1", + "version": "1.10.0", "source": { "type": "git", "url": "https://github.com/facade/flare-client-php.git", - "reference": "b2adf1512755637d0cef4f7d1b54301325ac78ed" + "reference": "213fa2c69e120bca4c51ba3e82ed1834ef3f41b8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/facade/flare-client-php/zipball/b2adf1512755637d0cef4f7d1b54301325ac78ed", - "reference": "b2adf1512755637d0cef4f7d1b54301325ac78ed", + "url": "https://api.github.com/repos/facade/flare-client-php/zipball/213fa2c69e120bca4c51ba3e82ed1834ef3f41b8", + "reference": "213fa2c69e120bca4c51ba3e82ed1834ef3f41b8", "shasum": "" }, "require": { @@ -5497,7 +5512,7 @@ }, "require-dev": { "friendsofphp/php-cs-fixer": "^2.14", - "phpunit/phpunit": "^7.5.16", + "phpunit/phpunit": "^7.5", "spatie/phpunit-snapshot-assertions": "^2.0" }, "type": "library", @@ -5528,7 +5543,7 @@ ], "support": { "issues": "https://github.com/facade/flare-client-php/issues", - "source": "https://github.com/facade/flare-client-php/tree/1.9.1" + "source": "https://github.com/facade/flare-client-php/tree/1.10.0" }, "funding": [ { @@ -5536,20 +5551,20 @@ "type": "github" } ], - "time": "2021-09-13T12:16:46+00:00" + "time": "2022-08-09T11:23:57+00:00" }, { "name": "facade/ignition", - "version": "2.17.4", + "version": "2.17.6", "source": { "type": "git", "url": "https://github.com/facade/ignition.git", - "reference": "95c80bd35ee6858e9e1439b2f6a698295eeb2070" + "reference": "6acd82e986a2ecee89e2e68adfc30a1936d1ab7c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/facade/ignition/zipball/95c80bd35ee6858e9e1439b2f6a698295eeb2070", - "reference": "95c80bd35ee6858e9e1439b2f6a698295eeb2070", + "url": "https://api.github.com/repos/facade/ignition/zipball/6acd82e986a2ecee89e2e68adfc30a1936d1ab7c", + "reference": "6acd82e986a2ecee89e2e68adfc30a1936d1ab7c", "shasum": "" }, "require": { @@ -5614,7 +5629,7 @@ "issues": "https://github.com/facade/ignition/issues", "source": "https://github.com/facade/ignition" }, - "time": "2021-12-27T15:11:24+00:00" + "time": "2022-06-30T18:26:59+00:00" }, { "name": "facade/ignition-contracts", @@ -5671,16 +5686,16 @@ }, { "name": "fakerphp/faker", - "version": "v1.19.0", + "version": "v1.20.0", "source": { "type": "git", "url": "https://github.com/FakerPHP/Faker.git", - "reference": "d7f08a622b3346766325488aa32ddc93ccdecc75" + "reference": "37f751c67a5372d4e26353bd9384bc03744ec77b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/d7f08a622b3346766325488aa32ddc93ccdecc75", - "reference": "d7f08a622b3346766325488aa32ddc93ccdecc75", + "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/37f751c67a5372d4e26353bd9384bc03744ec77b", + "reference": "37f751c67a5372d4e26353bd9384bc03744ec77b", "shasum": "" }, "require": { @@ -5707,7 +5722,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "v1.19-dev" + "dev-main": "v1.20-dev" } }, "autoload": { @@ -5732,9 +5747,9 @@ ], "support": { "issues": "https://github.com/FakerPHP/Faker/issues", - "source": "https://github.com/FakerPHP/Faker/tree/v1.19.0" + "source": "https://github.com/FakerPHP/Faker/tree/v1.20.0" }, - "time": "2022-02-02T17:38:57+00:00" + "time": "2022-07-20T13:12:54+00:00" }, { "name": "filp/whoops", @@ -5860,16 +5875,16 @@ }, { "name": "laravel/sail", - "version": "v1.13.4", + "version": "v1.16.0", "source": { "type": "git", "url": "https://github.com/laravel/sail.git", - "reference": "57d2942d5edd89b2018d0a3447da321fa35baac7" + "reference": "73030c18b769f27e6f6aacf7848d024fa9a55560" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/sail/zipball/57d2942d5edd89b2018d0a3447da321fa35baac7", - "reference": "57d2942d5edd89b2018d0a3447da321fa35baac7", + "url": "https://api.github.com/repos/laravel/sail/zipball/73030c18b769f27e6f6aacf7848d024fa9a55560", + "reference": "73030c18b769f27e6f6aacf7848d024fa9a55560", "shasum": "" }, "require": { @@ -5916,20 +5931,20 @@ "issues": "https://github.com/laravel/sail/issues", "source": "https://github.com/laravel/sail" }, - "time": "2022-02-17T19:55:30+00:00" + "time": "2022-08-31T16:38:14+00:00" }, { "name": "mockery/mockery", - "version": "1.5.0", + "version": "1.5.1", "source": { "type": "git", "url": "https://github.com/mockery/mockery.git", - "reference": "c10a5f6e06fc2470ab1822fa13fa2a7380f8fbac" + "reference": "e92dcc83d5a51851baf5f5591d32cb2b16e3684e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mockery/mockery/zipball/c10a5f6e06fc2470ab1822fa13fa2a7380f8fbac", - "reference": "c10a5f6e06fc2470ab1822fa13fa2a7380f8fbac", + "url": "https://api.github.com/repos/mockery/mockery/zipball/e92dcc83d5a51851baf5f5591d32cb2b16e3684e", + "reference": "e92dcc83d5a51851baf5f5591d32cb2b16e3684e", "shasum": "" }, "require": { @@ -5986,34 +6001,35 @@ ], "support": { "issues": "https://github.com/mockery/mockery/issues", - "source": "https://github.com/mockery/mockery/tree/1.5.0" + "source": "https://github.com/mockery/mockery/tree/1.5.1" }, - "time": "2022-01-20T13:18:17+00:00" + "time": "2022-09-07T15:32:08+00:00" }, { "name": "myclabs/deep-copy", - "version": "1.10.2", + "version": "1.11.0", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220" + "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/776f831124e9c62e1a2c601ecc52e776d8bb7220", - "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/14daed4296fae74d9e3201d2c4925d1acb7aa614", + "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614", "shasum": "" }, "require": { "php": "^7.1 || ^8.0" }, - "replace": { - "myclabs/deep-copy": "self.version" + "conflict": { + "doctrine/collections": "<1.6.8", + "doctrine/common": "<2.13.3 || >=3,<3.2.2" }, "require-dev": { - "doctrine/collections": "^1.0", - "doctrine/common": "^2.6", - "phpunit/phpunit": "^7.1" + "doctrine/collections": "^1.6.8", + "doctrine/common": "^2.13.3 || ^3.2.2", + "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" }, "type": "library", "autoload": { @@ -6038,7 +6054,7 @@ ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.10.2" + "source": "https://github.com/myclabs/DeepCopy/tree/1.11.0" }, "funding": [ { @@ -6046,7 +6062,7 @@ "type": "tidelift" } ], - "time": "2020-11-13T09:40:50+00:00" + "time": "2022-03-03T13:19:32+00:00" }, { "name": "nunomaduro/collision", @@ -6246,252 +6262,25 @@ }, "time": "2022-02-21T01:04:05+00:00" }, - { - "name": "phpdocumentor/reflection-common", - "version": "2.2.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-2.x": "2.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jaap van Otterdijk", - "email": "opensource@ijaap.nl" - } - ], - "description": "Common reflection classes used by phpdocumentor to reflect the code structure", - "homepage": "http://www.phpdoc.org", - "keywords": [ - "FQSEN", - "phpDocumentor", - "phpdoc", - "reflection", - "static analysis" - ], - "support": { - "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", - "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" - }, - "time": "2020-06-27T09:03:43+00:00" - }, - { - "name": "phpdocumentor/reflection-docblock", - "version": "5.3.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "622548b623e81ca6d78b721c5e029f4ce664f170" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170", - "reference": "622548b623e81ca6d78b721c5e029f4ce664f170", - "shasum": "" - }, - "require": { - "ext-filter": "*", - "php": "^7.2 || ^8.0", - "phpdocumentor/reflection-common": "^2.2", - "phpdocumentor/type-resolver": "^1.3", - "webmozart/assert": "^1.9.1" - }, - "require-dev": { - "mockery/mockery": "~1.3.2", - "psalm/phar": "^4.8" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - }, - { - "name": "Jaap van Otterdijk", - "email": "account@ijaap.nl" - } - ], - "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "support": { - "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", - "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.3.0" - }, - "time": "2021-10-19T17:43:47+00:00" - }, - { - "name": "phpdocumentor/type-resolver", - "version": "1.6.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "93ebd0014cab80c4ea9f5e297ea48672f1b87706" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/93ebd0014cab80c4ea9f5e297ea48672f1b87706", - "reference": "93ebd0014cab80c4ea9f5e297ea48672f1b87706", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0", - "phpdocumentor/reflection-common": "^2.0" - }, - "require-dev": { - "ext-tokenizer": "*", - "psalm/phar": "^4.8" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-1.x": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - } - ], - "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", - "support": { - "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.0" - }, - "time": "2022-01-04T19:58:01+00:00" - }, - { - "name": "phpspec/prophecy", - "version": "v1.15.0", - "source": { - "type": "git", - "url": "https://github.com/phpspec/prophecy.git", - "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/bbcd7380b0ebf3961ee21409db7b38bc31d69a13", - "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.2", - "php": "^7.2 || ~8.0, <8.2", - "phpdocumentor/reflection-docblock": "^5.2", - "sebastian/comparator": "^3.0 || ^4.0", - "sebastian/recursion-context": "^3.0 || ^4.0" - }, - "require-dev": { - "phpspec/phpspec": "^6.0 || ^7.0", - "phpunit/phpunit": "^8.0 || ^9.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Prophecy\\": "src/Prophecy" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com", - "homepage": "http://everzet.com" - }, - { - "name": "Marcello Duarte", - "email": "marcello.duarte@gmail.com" - } - ], - "description": "Highly opinionated mocking framework for PHP 5.3+", - "homepage": "https://github.com/phpspec/prophecy", - "keywords": [ - "Double", - "Dummy", - "fake", - "mock", - "spy", - "stub" - ], - "support": { - "issues": "https://github.com/phpspec/prophecy/issues", - "source": "https://github.com/phpspec/prophecy/tree/v1.15.0" - }, - "time": "2021-12-08T12:19:24+00:00" - }, { "name": "phpunit/php-code-coverage", - "version": "9.2.11", + "version": "9.2.17", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "665a1ac0a763c51afc30d6d130dac0813092b17f" + "reference": "aa94dc41e8661fe90c7316849907cba3007b10d8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/665a1ac0a763c51afc30d6d130dac0813092b17f", - "reference": "665a1ac0a763c51afc30d6d130dac0813092b17f", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/aa94dc41e8661fe90c7316849907cba3007b10d8", + "reference": "aa94dc41e8661fe90c7316849907cba3007b10d8", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^4.13.0", + "nikic/php-parser": "^4.14", "php": ">=7.3", "phpunit/php-file-iterator": "^3.0.3", "phpunit/php-text-template": "^2.0.2", @@ -6540,7 +6329,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.11" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.17" }, "funding": [ { @@ -6548,7 +6337,7 @@ "type": "github" } ], - "time": "2022-02-18T12:46:09+00:00" + "time": "2022-08-30T12:24:04+00:00" }, { "name": "phpunit/php-file-iterator", @@ -6793,16 +6582,16 @@ }, { "name": "phpunit/phpunit", - "version": "9.5.14", + "version": "9.5.24", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "1883687169c017d6ae37c58883ca3994cfc34189" + "reference": "d0aa6097bef9fd42458a9b3c49da32c6ce6129c5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/1883687169c017d6ae37c58883ca3994cfc34189", - "reference": "1883687169c017d6ae37c58883ca3994cfc34189", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/d0aa6097bef9fd42458a9b3c49da32c6ce6129c5", + "reference": "d0aa6097bef9fd42458a9b3c49da32c6ce6129c5", "shasum": "" }, "require": { @@ -6817,8 +6606,7 @@ "phar-io/manifest": "^2.0.3", "phar-io/version": "^3.0.2", "php": ">=7.3", - "phpspec/prophecy": "^1.12.1", - "phpunit/php-code-coverage": "^9.2.7", + "phpunit/php-code-coverage": "^9.2.13", "phpunit/php-file-iterator": "^3.0.5", "phpunit/php-invoker": "^3.1.1", "phpunit/php-text-template": "^2.0.3", @@ -6832,13 +6620,9 @@ "sebastian/global-state": "^5.0.1", "sebastian/object-enumerator": "^4.0.3", "sebastian/resource-operations": "^3.0.3", - "sebastian/type": "^2.3.4", + "sebastian/type": "^3.1", "sebastian/version": "^3.0.2" }, - "require-dev": { - "ext-pdo": "*", - "phpspec/prophecy-phpunit": "^2.0.1" - }, "suggest": { "ext-soap": "*", "ext-xdebug": "*" @@ -6880,7 +6664,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.14" + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.24" }, "funding": [ { @@ -6892,7 +6676,7 @@ "type": "github" } ], - "time": "2022-02-18T12:54:07+00:00" + "time": "2022-08-30T07:42:16+00:00" }, { "name": "sebastian/cli-parser", @@ -7063,16 +6847,16 @@ }, { "name": "sebastian/comparator", - "version": "4.0.6", + "version": "4.0.8", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "55f4261989e546dc112258c7a75935a81a7ce382" + "reference": "fa0f136dd2334583309d32b62544682ee972b51a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382", - "reference": "55f4261989e546dc112258c7a75935a81a7ce382", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a", + "reference": "fa0f136dd2334583309d32b62544682ee972b51a", "shasum": "" }, "require": { @@ -7125,7 +6909,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", - "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6" + "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8" }, "funding": [ { @@ -7133,7 +6917,7 @@ "type": "github" } ], - "time": "2020-10-26T15:49:45+00:00" + "time": "2022-09-14T12:41:17+00:00" }, { "name": "sebastian/complexity", @@ -7260,16 +7044,16 @@ }, { "name": "sebastian/environment", - "version": "5.1.3", + "version": "5.1.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "388b6ced16caa751030f6a69e588299fa09200ac" + "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/388b6ced16caa751030f6a69e588299fa09200ac", - "reference": "388b6ced16caa751030f6a69e588299fa09200ac", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/1b5dff7bb151a4db11d49d90e5408e4e938270f7", + "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7", "shasum": "" }, "require": { @@ -7311,7 +7095,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/environment/issues", - "source": "https://github.com/sebastianbergmann/environment/tree/5.1.3" + "source": "https://github.com/sebastianbergmann/environment/tree/5.1.4" }, "funding": [ { @@ -7319,20 +7103,20 @@ "type": "github" } ], - "time": "2020-09-28T05:52:38+00:00" + "time": "2022-04-03T09:37:03+00:00" }, { "name": "sebastian/exporter", - "version": "4.0.4", + "version": "4.0.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9" + "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/65e8b7db476c5dd267e65eea9cab77584d3cfff9", - "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", + "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", "shasum": "" }, "require": { @@ -7388,7 +7172,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.4" + "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.5" }, "funding": [ { @@ -7396,7 +7180,7 @@ "type": "github" } ], - "time": "2021-11-11T14:18:36+00:00" + "time": "2022-09-14T06:03:37+00:00" }, { "name": "sebastian/global-state", @@ -7751,28 +7535,28 @@ }, { "name": "sebastian/type", - "version": "2.3.4", + "version": "3.2.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", - "reference": "b8cd8a1c753c90bc1a0f5372170e3e489136f914" + "reference": "fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b8cd8a1c753c90bc1a0f5372170e3e489136f914", - "reference": "b8cd8a1c753c90bc1a0f5372170e3e489136f914", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e", + "reference": "fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e", "shasum": "" }, "require": { "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^9.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev" + "dev-master": "3.2-dev" } }, "autoload": { @@ -7795,7 +7579,7 @@ "homepage": "https://github.com/sebastianbergmann/type", "support": { "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/2.3.4" + "source": "https://github.com/sebastianbergmann/type/tree/3.2.0" }, "funding": [ { @@ -7803,7 +7587,7 @@ "type": "github" } ], - "time": "2021-06-15T12:49:02+00:00" + "time": "2022-09-12T14:47:03+00:00" }, { "name": "sebastian/version", diff --git a/database/migrations/2022_09_21_000000_create_user_roles_table.php b/database/migrations/2022_09_21_000000_create_user_roles_table.php new file mode 100644 index 0000000..2570abd --- /dev/null +++ b/database/migrations/2022_09_21_000000_create_user_roles_table.php @@ -0,0 +1,32 @@ +id(); + $table->string('role_name'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('user_roles'); + } +} diff --git a/database/migrations/2014_10_12_000000_create_users_table.php b/database/migrations/2022_09_21_000001_create_users_table.php similarity index 80% rename from database/migrations/2014_10_12_000000_create_users_table.php rename to database/migrations/2022_09_21_000001_create_users_table.php index 621a24e..dc75253 100644 --- a/database/migrations/2014_10_12_000000_create_users_table.php +++ b/database/migrations/2022_09_21_000001_create_users_table.php @@ -19,9 +19,13 @@ public function up() $table->string('email')->unique(); $table->timestamp('email_verified_at')->nullable(); $table->string('password'); + $table->biginteger('role_id')->unsigned(); $table->rememberToken(); $table->timestamps(); }); + Schema::table('users', function($table) { + $table->foreign('role_id')->references('id')->on('user_roles'); + }); } /** diff --git a/database/migrations/2022_09_21_082945_create_projects_table.php b/database/migrations/2022_09_21_082945_create_projects_table.php new file mode 100644 index 0000000..0ce3a56 --- /dev/null +++ b/database/migrations/2022_09_21_082945_create_projects_table.php @@ -0,0 +1,36 @@ +id(); + $table->string('name')->unique(); + $table->biginteger('user_id')->unsigned(); + $table->timestamps(); + }); + Schema::table('tasks', function($table) { + $table->foreign('user_id')->references('id')->on('users'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('projects'); + } +} diff --git a/database/migrations/2022_09_21_083050_create_task_statuses_table.php b/database/migrations/2022_09_21_083050_create_task_statuses_table.php new file mode 100644 index 0000000..0baed2e --- /dev/null +++ b/database/migrations/2022_09_21_083050_create_task_statuses_table.php @@ -0,0 +1,32 @@ +id(); + $table->string('status',200); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('task_statuses'); + } +} diff --git a/database/migrations/2022_09_21_083057_create_tasks_table.php b/database/migrations/2022_09_21_083057_create_tasks_table.php new file mode 100644 index 0000000..8ddad7f --- /dev/null +++ b/database/migrations/2022_09_21_083057_create_tasks_table.php @@ -0,0 +1,41 @@ +id(); + $table->string('title'); + $table->string('description')->nullable(); + $table->biginteger('status_id')->unsigned(); + $table->biginteger('user_id')->unsigned(); + $table->biginteger('project_id')->unsigned(); + $table->timestamps(); + }); + Schema::table('tasks', function($table) { + $table->foreign('user_id')->references('id')->on('users'); + $table->foreign('project_id')->references('id')->on('projects'); + $table->foreign('status_id')->references('id')->on('task_statuses'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('tasks'); + } +} diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index 57b73b5..1d52728 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -14,5 +14,8 @@ class DatabaseSeeder extends Seeder public function run() { // \App\Models\User::factory(10)->create(); + $this->call(TaskStatusesTableSeeder::class); + $this->call(UserRolesTableSeeder::class); + $this->call(UsersTableSeeder::class); } } diff --git a/database/seeders/TaskStatusesTableSeeder.php b/database/seeders/TaskStatusesTableSeeder.php new file mode 100644 index 0000000..fa1634f --- /dev/null +++ b/database/seeders/TaskStatusesTableSeeder.php @@ -0,0 +1,44 @@ +delete(); + \DB::table('task_statuses')->insert(array ( + 0 => + array ( + 'status' => 'NOT_STARTED', + 'created_at' => '2022-09-21 09:14:10', + 'updated_at' => '2022-09-21 09:14:10', + ), + 1 => + array ( + 'status' => 'IN_PROGRESS', + 'created_at' => '2022-09-21 09:14:10', + 'updated_at' => '2022-09-21 09:14:10', + ), + 2 => + array ( + 'status' => 'READY_FOR_TEST', + 'created_at' => '2022-09-21 09:14:10', + 'updated_at' => '2022-09-21 09:14:10', + ), + 3 => + array ( + 'status' => 'COMPLETED', + 'created_at' => '2022-09-21 09:14:10', + 'updated_at' => '2022-09-21 09:14:10', + ), + )); + } +} diff --git a/database/seeders/UserRolesTableSeeder.php b/database/seeders/UserRolesTableSeeder.php new file mode 100644 index 0000000..a63d5bd --- /dev/null +++ b/database/seeders/UserRolesTableSeeder.php @@ -0,0 +1,38 @@ +delete(); + \DB::table('user_roles')->insert(array ( + 0 => + array ( + 'role_name' => 'ADMIN', + 'created_at' => '2022-09-21 09:14:10', + 'updated_at' => '2022-09-21 09:14:10', + ), + 1 => + array ( + 'role_name' => 'PRODUCT_OWNER', + 'created_at' => '2022-09-21 09:14:10', + 'updated_at' => '2022-09-21 09:14:10', + ), + 2 => + array ( + 'role_name' => 'TEAM_MEMBER', + 'created_at' => '2022-09-21 09:14:10', + 'updated_at' => '2022-09-21 09:14:10', + ), + )); + } +} diff --git a/database/seeders/UsersTableSeeder.php b/database/seeders/UsersTableSeeder.php new file mode 100644 index 0000000..013d07f --- /dev/null +++ b/database/seeders/UsersTableSeeder.php @@ -0,0 +1,29 @@ +delete(); + $faker = \Faker\Factory::create(); + $password = Hash::make('admin@123'); + User::create([ + 'name' => 'Administrator', + 'email' => 'admin@test.com', + 'password' => $password, + 'role_id' => 1, + ]); + } +} diff --git a/docs/ACN-coding-test.postman_collection.json b/docs/ACN-coding-test.postman_collection.json new file mode 100644 index 0000000..453bb33 --- /dev/null +++ b/docs/ACN-coding-test.postman_collection.json @@ -0,0 +1,870 @@ +{ + "info": { + "_postman_id": "e88a99c7-d3d4-45e5-b61a-a89de519c734", + "name": "ACN-coding-test", + "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json" + }, + "item": [ + { + "name": "User Registration", + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\n \"name\": \"Test User\",\n \"email\": \"test22@gmail.com\",\n \"password\": \"test@123\",\n \"role_id\":2\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "http://127.0.0.1:8000/api/auth/register", + "protocol": "http", + "host": [ + "127", + "0", + "0", + "1" + ], + "port": "8000", + "path": [ + "api", + "auth", + "register" + ] + }, + "description": "Registration API" + }, + "response": [] + }, + { + "name": "Login Api", + "request": { + "method": "POST", + "header": [ + { + "key": "Accept", + "value": "application/json", + "type": "text" + }, + { + "key": "", + "value": "", + "type": "text" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"email\": \"test22@gmail.com\" ,\n \"password\": \"test@123\" \n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "http://127.0.0.1:8000/api/auth/login", + "protocol": "http", + "host": [ + "127", + "0", + "0", + "1" + ], + "port": "8000", + "path": [ + "api", + "auth", + "login" + ] + }, + "description": "Login Api" + }, + "response": [] + }, + { + "name": "Retrieve All Users", + "request": { + "auth": { + "type": "bearer", + "bearer": [ + { + "key": "token", + "value": "{{ADMIN_SESSION_JWT}}", + "type": "string" + } + ] + }, + "method": "GET", + "header": [], + "url": { + "raw": "http://127.0.0.1:8000/api/v1/users", + "protocol": "http", + "host": [ + "127", + "0", + "0", + "1" + ], + "port": "8000", + "path": [ + "api", + "v1", + "users" + ] + }, + "description": "Only ADMIN USER CAN SEE" + }, + "response": [] + }, + { + "name": "Retrieve Single User", + "request": { + "auth": { + "type": "bearer", + "bearer": [ + { + "key": "token", + "value": "{{ADMIN_SESSION_JWT}}", + "type": "string" + } + ] + }, + "method": "GET", + "header": [], + "url": { + "raw": "http://127.0.0.1:8000/api/v1/users/4", + "protocol": "http", + "host": [ + "127", + "0", + "0", + "1" + ], + "port": "8000", + "path": [ + "api", + "v1", + "users", + "4" + ] + }, + "description": "Only Admin User Can See all record and others logged in user can see only their record." + }, + "response": [] + }, + { + "name": "Update User Using Put Method", + "request": { + "auth": { + "type": "bearer", + "bearer": [ + { + "key": "token", + "value": "{{ADMIN_SESSION_JWT}}", + "type": "string" + } + ] + }, + "method": "PUT", + "header": [], + "body": { + "mode": "raw", + "raw": "{\n \"name\": \"TEST\",\n \"email\": \"test22@gmail.com\",\n \"role_id\":2\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "http://127.0.0.1:8000/api/v1/users/4", + "protocol": "http", + "host": [ + "127", + "0", + "0", + "1" + ], + "port": "8000", + "path": [ + "api", + "v1", + "users", + "4" + ] + }, + "description": "Only Admin User Can Update." + }, + "response": [] + }, + { + "name": "Update User Using Patch Method", + "request": { + "auth": { + "type": "bearer", + "bearer": [ + { + "key": "token", + "value": "{{ADMIN_SESSION_JWT}}", + "type": "string" + } + ] + }, + "method": "PATCH", + "header": [], + "body": { + "mode": "raw", + "raw": "{\n \"name\": \"test user\"\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "http://127.0.0.1:8000/api/v1/users/4", + "protocol": "http", + "host": [ + "127", + "0", + "0", + "1" + ], + "port": "8000", + "path": [ + "api", + "v1", + "users", + "4" + ] + }, + "description": "Only Name Can Update" + }, + "response": [] + }, + { + "name": "Create New User Role", + "request": { + "auth": { + "type": "bearer", + "bearer": [ + { + "key": "token", + "value": "{{ADMIN_SESSION_JWT}}", + "type": "string" + } + ] + }, + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\n \"role_name\":\"STAFF\"\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "http://127.0.0.1:8000/api/v1/roles", + "protocol": "http", + "host": [ + "127", + "0", + "0", + "1" + ], + "port": "8000", + "path": [ + "api", + "v1", + "roles" + ] + }, + "description": "Only ADMIN USER can Create Role" + }, + "response": [] + }, + { + "name": "Retrieve All User Roles", + "request": { + "auth": { + "type": "bearer", + "bearer": [ + { + "key": "token", + "value": "{{ADMIN_SESSION_JWT}}", + "type": "string" + } + ] + }, + "method": "GET", + "header": [], + "url": { + "raw": "http://127.0.0.1:8000/api/v1/roles", + "protocol": "http", + "host": [ + "127", + "0", + "0", + "1" + ], + "port": "8000", + "path": [ + "api", + "v1", + "roles" + ] + }, + "description": "Only ADMIN USER Can See." + }, + "response": [] + }, + { + "name": "Create New Project", + "request": { + "auth": { + "type": "bearer", + "bearer": [ + { + "key": "token", + "value": "{{USER_SESSION_JWT}}", + "type": "string" + } + ] + }, + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\n \"name\": \"Test Project\",\n \"user_id\": 2\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "http://127.0.0.1:8000/api/v1/projects", + "protocol": "http", + "host": [ + "127", + "0", + "0", + "1" + ], + "port": "8000", + "path": [ + "api", + "v1", + "projects" + ] + }, + "description": "Only PRODUCT_OWNER Role User Can Create New Project." + }, + "response": [] + }, + { + "name": "Implement Pagination On Project", + "request": { + "auth": { + "type": "bearer", + "bearer": [ + { + "key": "token", + "value": "{{USER_SESSION_JWT}}", + "type": "string" + } + ] + }, + "method": "GET", + "header": [], + "url": { + "raw": "http://127.0.0.1:8000/api/v1/projects?q=Demo Project&pageIndex=0&pageSize=3&sortBy=name&sortDirection=ASC&page=1", + "protocol": "http", + "host": [ + "127", + "0", + "0", + "1" + ], + "port": "8000", + "path": [ + "api", + "v1", + "projects" + ], + "query": [ + { + "key": "q", + "value": "Demo Project" + }, + { + "key": "pageIndex", + "value": "0" + }, + { + "key": "pageSize", + "value": "3" + }, + { + "key": "sortBy", + "value": "name" + }, + { + "key": "sortDirection", + "value": "ASC" + }, + { + "key": "page", + "value": "1" + } + ] + } + }, + "response": [] + }, + { + "name": "Retrieve Single Project", + "request": { + "auth": { + "type": "bearer", + "bearer": [ + { + "key": "token", + "value": "{{USER_SESSION_JWT}}", + "type": "string" + } + ] + }, + "method": "GET", + "header": [], + "url": { + "raw": "http://127.0.0.1:8000/api/v1/projects/2", + "protocol": "http", + "host": [ + "127", + "0", + "0", + "1" + ], + "port": "8000", + "path": [ + "api", + "v1", + "projects", + "2" + ] + } + }, + "response": [] + }, + { + "name": "Create New Task", + "request": { + "auth": { + "type": "bearer", + "bearer": [ + { + "key": "token", + "value": "{{USER_SESSION_JWT}}", + "type": "string" + } + ] + }, + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Demo Task\",\n \"description\": \"Lorem Ipsum\",\n \"status_id\": 1,\n \"user_id\": 5,\n \"project_id\": 6\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "http://127.0.0.1:8000/api/v1/tasks", + "protocol": "http", + "host": [ + "127", + "0", + "0", + "1" + ], + "port": "8000", + "path": [ + "api", + "v1", + "tasks" + ] + }, + "description": "Only PRODUCT_OWNER can Create a task." + }, + "response": [] + }, + { + "name": "Retrieve All Task List", + "protocolProfileBehavior": { + "disableBodyPruning": true + }, + "request": { + "auth": { + "type": "bearer", + "bearer": [ + { + "key": "token", + "value": "{{USER_SESSION_JWT}}", + "type": "string" + } + ] + }, + "method": "GET", + "header": [], + "body": { + "mode": "formdata", + "formdata": [] + }, + "url": { + "raw": "http://127.0.0.1:8000/api/v1/tasks", + "protocol": "http", + "host": [ + "127", + "0", + "0", + "1" + ], + "port": "8000", + "path": [ + "api", + "v1", + "tasks" + ] + } + }, + "response": [] + }, + { + "name": "Retrieve Single Task", + "request": { + "auth": { + "type": "bearer", + "bearer": [ + { + "key": "token", + "value": "22|M4UgYWRqc0roPs2bDnWPYwoXMshPUEyDf8XN8qge", + "type": "string" + } + ] + }, + "method": "GET", + "header": [], + "url": { + "raw": "http://127.0.0.1:8000/api/v1/tasks/3", + "protocol": "http", + "host": [ + "127", + "0", + "0", + "1" + ], + "port": "8000", + "path": [ + "api", + "v1", + "tasks", + "3" + ] + } + }, + "response": [] + }, + { + "name": "Update Task Status Only(Team Member)", + "request": { + "auth": { + "type": "bearer", + "bearer": [ + { + "key": "token", + "value": "22|M4UgYWRqc0roPs2bDnWPYwoXMshPUEyDf8XN8qge", + "type": "string" + } + ] + }, + "method": "PATCH", + "header": [], + "body": { + "mode": "raw", + "raw": "{\n \"status_id\": 2\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "http://127.0.0.1:8000/api/v1/tasks/2", + "protocol": "http", + "host": [ + "127", + "0", + "0", + "1" + ], + "port": "8000", + "path": [ + "api", + "v1", + "tasks", + "2" + ] + }, + "description": "Only Task assign member can update status." + }, + "response": [] + }, + { + "name": "Update Task(Product Owner)", + "request": { + "method": "PUT", + "header": [], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Demo\",\n \"description\": \"Lorem Ipsum\"\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "http://127.0.0.1:8000/api/v1/tasks/2", + "protocol": "http", + "host": [ + "127", + "0", + "0", + "1" + ], + "port": "8000", + "path": [ + "api", + "v1", + "tasks", + "2" + ] + }, + "description": "Only PRODUCT_OWNER can update task except status" + }, + "response": [] + }, + { + "name": "Create New Task Status", + "request": { + "auth": { + "type": "bearer", + "bearer": [ + { + "key": "token", + "value": "{{ADMIN_SESSION_JWT}}", + "type": "string" + } + ] + }, + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\n \"status\": \"NOT_DONE\"\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "http://127.0.0.1:8000/api/v1/status", + "protocol": "http", + "host": [ + "127", + "0", + "0", + "1" + ], + "port": "8000", + "path": [ + "api", + "v1", + "status" + ] + }, + "description": "Only ADMIN user can create task status" + }, + "response": [] + }, + { + "name": "Retrieve All Task Status", + "request": { + "auth": { + "type": "bearer", + "bearer": [ + { + "key": "token", + "value": "{{ADMIN_SESSION_JWT}}", + "type": "string" + } + ] + }, + "method": "GET", + "header": [], + "url": { + "raw": "http://127.0.0.1:8000/api/v1/status", + "protocol": "http", + "host": [ + "127", + "0", + "0", + "1" + ], + "port": "8000", + "path": [ + "api", + "v1", + "status" + ] + }, + "description": "Only ADMIN User can See Task Status" + }, + "response": [] + }, + { + "name": "Task Status Update(Only Admin User)", + "request": { + "auth": { + "type": "bearer", + "bearer": [ + { + "key": "token", + "value": "{{ADMIN_SESSION_JWT}}", + "type": "string" + } + ] + }, + "method": "PUT", + "header": [], + "body": { + "mode": "raw", + "raw": "{\n \"status\": \"NOT_DONE\"\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "http://127.0.0.1:8000/api/v1/status/1", + "protocol": "http", + "host": [ + "127", + "0", + "0", + "1" + ], + "port": "8000", + "path": [ + "api", + "v1", + "status", + "1" + ] + } + }, + "response": [] + }, + { + "name": "Task Status Delete (Only ADMIN User)", + "request": { + "auth": { + "type": "bearer", + "bearer": [ + { + "key": "token", + "value": "{{ADMIN_SESSION_JWT}}", + "type": "string" + } + ] + }, + "method": "DELETE", + "header": [], + "url": { + "raw": "http://127.0.0.1:8000/api/v1/status/6", + "protocol": "http", + "host": [ + "127", + "0", + "0", + "1" + ], + "port": "8000", + "path": [ + "api", + "v1", + "status", + "6" + ] + } + }, + "response": [] + }, + { + "name": "Update Project", + "request": { + "auth": { + "type": "bearer", + "bearer": [ + { + "key": "token", + "value": "{{USER_SESSION_JWT}}", + "type": "string" + } + ] + }, + "method": "PUT", + "header": [], + "body": { + "mode": "raw", + "raw": "{\n \"name\": \"DEMO\"\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "http://127.0.0.1:8000/api/v1/projects/1", + "protocol": "http", + "host": [ + "127", + "0", + "0", + "1" + ], + "port": "8000", + "path": [ + "api", + "v1", + "projects", + "1" + ] + }, + "description": "Update Project" + }, + "response": [] + } + ] +} \ No newline at end of file diff --git a/docs/test-manual.doc b/docs/test-manual.doc new file mode 100644 index 0000000..c3555b9 Binary files /dev/null and b/docs/test-manual.doc differ diff --git a/resources/views/login.blade.php b/resources/views/login.blade.php new file mode 100644 index 0000000..5708f86 --- /dev/null +++ b/resources/views/login.blade.php @@ -0,0 +1,132 @@ + + + + + + + Laravel + + + + + + + + + + +
+ @if (Route::has('login')) + + @endif + +
+
+ + + + + +
+ +
+
+
+ + +
+
+ Laravel has wonderful, thorough documentation covering every aspect of the framework. Whether you are new to the framework or have previous experience with Laravel, we recommend reading all of the documentation from beginning to end. +
+
+
+ +
+
+ + +
+ +
+
+ Laracasts offers thousands of video tutorials on Laravel, PHP, and JavaScript development. Check them out, see for yourself, and massively level up your development skills in the process. +
+
+
+ +
+
+ + +
+ +
+
+ Laravel News is a community driven portal and newsletter aggregating all of the latest and most important news in the Laravel ecosystem, including new package releases and tutorials. +
+
+
+ +
+
+ +
Vibrant Ecosystem
+
+ +
+
+ Laravel's robust library of first-party tools and libraries, such as Forge, Vapor, Nova, and Envoyer help you take your projects to the next level. Pair them with powerful open source libraries like Cashier, Dusk, Echo, Horizon, Sanctum, Telescope, and more. +
+
+
+
+
+ +
+
+
+ + + + + + Shop + + + + + + + + Sponsor + +
+
+ +
+ Laravel v{{ Illuminate\Foundation\Application::VERSION }} (PHP v{{ PHP_VERSION }}) +
+
+
+
+ + diff --git a/resources/views/register.blade.php b/resources/views/register.blade.php new file mode 100644 index 0000000..5708f86 --- /dev/null +++ b/resources/views/register.blade.php @@ -0,0 +1,132 @@ + + + + + + + Laravel + + + + + + + + + + +
+ @if (Route::has('login')) + + @endif + +
+
+ + + + + +
+ +
+
+
+ + +
+
+ Laravel has wonderful, thorough documentation covering every aspect of the framework. Whether you are new to the framework or have previous experience with Laravel, we recommend reading all of the documentation from beginning to end. +
+
+
+ +
+
+ + +
+ +
+
+ Laracasts offers thousands of video tutorials on Laravel, PHP, and JavaScript development. Check them out, see for yourself, and massively level up your development skills in the process. +
+
+
+ +
+
+ + +
+ +
+
+ Laravel News is a community driven portal and newsletter aggregating all of the latest and most important news in the Laravel ecosystem, including new package releases and tutorials. +
+
+
+ +
+
+ +
Vibrant Ecosystem
+
+ +
+
+ Laravel's robust library of first-party tools and libraries, such as Forge, Vapor, Nova, and Envoyer help you take your projects to the next level. Pair them with powerful open source libraries like Cashier, Dusk, Echo, Horizon, Sanctum, Telescope, and more. +
+
+
+
+
+ +
+
+
+ + + + + + Shop + + + + + + + + Sponsor + +
+
+ +
+ Laravel v{{ Illuminate\Foundation\Application::VERSION }} (PHP v{{ PHP_VERSION }}) +
+
+
+
+ + diff --git a/resources/views/tasklist.blade.php b/resources/views/tasklist.blade.php new file mode 100644 index 0000000..5708f86 --- /dev/null +++ b/resources/views/tasklist.blade.php @@ -0,0 +1,132 @@ + + + + + + + Laravel + + + + + + + + + + +
+ @if (Route::has('login')) + + @endif + +
+
+ + + + + +
+ +
+
+
+ + +
+
+ Laravel has wonderful, thorough documentation covering every aspect of the framework. Whether you are new to the framework or have previous experience with Laravel, we recommend reading all of the documentation from beginning to end. +
+
+
+ +
+
+ + +
+ +
+
+ Laracasts offers thousands of video tutorials on Laravel, PHP, and JavaScript development. Check them out, see for yourself, and massively level up your development skills in the process. +
+
+
+ +
+
+ + +
+ +
+
+ Laravel News is a community driven portal and newsletter aggregating all of the latest and most important news in the Laravel ecosystem, including new package releases and tutorials. +
+
+
+ +
+
+ +
Vibrant Ecosystem
+
+ +
+
+ Laravel's robust library of first-party tools and libraries, such as Forge, Vapor, Nova, and Envoyer help you take your projects to the next level. Pair them with powerful open source libraries like Cashier, Dusk, Echo, Horizon, Sanctum, Telescope, and more. +
+
+
+
+
+ +
+
+
+ + + + + + Shop + + + + + + + + Sponsor + +
+
+ +
+ Laravel v{{ Illuminate\Foundation\Application::VERSION }} (PHP v{{ PHP_VERSION }}) +
+
+
+
+ + diff --git a/routes/api.php b/routes/api.php index eb6fa48..6a2ffc5 100644 --- a/routes/api.php +++ b/routes/api.php @@ -2,7 +2,12 @@ use Illuminate\Http\Request; use Illuminate\Support\Facades\Route; - +use App\Http\Controllers\Api\AuthController; +use App\Http\Controllers\Api\UserController; +use App\Http\Controllers\Api\ProjectController; +use App\Http\Controllers\Api\TaskController; +use App\Http\Controllers\Api\UserRoleController; +use App\Http\Controllers\Api\TaskStatusController; /* |-------------------------------------------------------------------------- | API Routes @@ -13,7 +18,51 @@ | is assigned the "api" middleware group. Enjoy building your API! | */ +Route::post('/auth/register', [AuthController::class, 'createUser']); +Route::post('/auth/login', [AuthController::class, 'loginUser']); + +Route::group(["middleware" => "auth:sanctum"], function($router){ + // User Resources + Route::get('/v1/users', [UserController::class, 'getAll'])->name('Get All User List'); + Route::get('/v1/users/{user_id}', [UserController::class, 'get'])->name('Get Single User'); + Route::put('/v1/users/{id}', [UserController::class, 'update'])->name('Put Update User'); + Route::patch('/v1/users/{id}', [UserController::class, 'patchupdate'])->name('Patch Update User'); + Route::delete('/v1/users/{id}', [UserController::class, 'delete'])->name('Delete User'); + + // Project Resources + Route::post('/v1/projects', [ProjectController::class, 'create'])->name('Create New Project'); + Route::get('/v1/projects', [ProjectController::class, 'getAll'])->name('Get All Project List'); + Route::get('/v1/projects/{id}', [ProjectController::class, 'get'])->name('Get Single Project'); + Route::put('/v1/projects/{id}', [ProjectController::class, 'update'])->name('Put Update Project'); + Route::patch('/v1/projects/{id}', [ProjectController::class, 'patchupdate'])->name('Patch Update Project'); + Route::delete('/v1/projects/{id}', [ProjectController::class, 'delete'])->name('Delete Project'); + + // Task Resources + Route::post('/v1/tasks', [TaskController::class, 'create'])->name('Create New Task'); + Route::get('/v1/tasks', [TaskController::class, 'getAll'])->name('Get All Task List'); + Route::get('/v1/tasks/{id}', [TaskController::class, 'get'])->name('Get Single Task'); + Route::put('/v1/tasks/{id}', [TaskController::class, 'update'])->name('Put Update Task'); + Route::patch('/v1/tasks/{id}', [TaskController::class, 'patchupdate'])->name('Patch Update Task'); + Route::delete('/v1/tasks/{id}', [TaskController::class, 'delete'])->name('Delete Task'); -Route::middleware('auth:sanctum')->get('/user', function (Request $request) { - return $request->user(); + // User Role Resources + Route::post('/v1/roles', [UserRoleController::class, 'create'])->name('Create New User Role'); + Route::get('/v1/roles', [UserRoleController::class, 'getAll'])->name('Get All Role List'); + Route::get('/v1/roles/{id}', [UserRoleController::class, 'get'])->name('Get Single Role'); + Route::put('/v1/roles/{id}', [UserRoleController::class, 'update'])->name('Put Update Role'); + Route::patch('/v1/roles/{id}', [UserRoleController::class, 'patchupdate'])->name('Patch Update Role'); + Route::delete('/v1/roles/{id}', [UserRoleController::class, 'delete'])->name('Delete Role'); + + // Task Status Resources + Route::post('/v1/status', [TaskStatusController::class, 'create'])->name('Create New Status'); + Route::get('/v1/status', [TaskStatusController::class, 'getAll'])->name('Get All Status List'); + Route::get('/v1/status/{id}', [TaskStatusController::class, 'get'])->name('Get Single Status'); + Route::put('/v1/status/{id}', [TaskStatusController::class, 'update'])->name('Put Update Status'); + Route::patch('/v1/status/{id}', [TaskStatusController::class, 'patchupdate'])->name('Patch Update Status'); + Route::delete('/v1/status/{id}', [TaskStatusController::class, 'delete'])->name('Delete Status'); }); + +// Route::middleware('auth:sanctum')->get('/user', function (Request $request) { +// return $request->user(); +// }); + diff --git a/routes/web.php b/routes/web.php index b130397..a53a9eb 100644 --- a/routes/web.php +++ b/routes/web.php @@ -16,3 +16,11 @@ Route::get('/', function () { return view('welcome'); }); + +Route::get('login', function() { + return view('login'); +})->name('login'); +Route::get('register', function() { + return view('register'); +})->name('register'); + diff --git a/tests/Feature/ProjectTest.php b/tests/Feature/ProjectTest.php new file mode 100644 index 0000000..b25cb33 --- /dev/null +++ b/tests/Feature/ProjectTest.php @@ -0,0 +1,71 @@ +get('/api/v1/projects'); + + $response->assertStatus(302); + } + + public function test_project_create_with_user_role_product_owner() + { + $user = User::where('role_id', '=', 2)->first(); //role = product owner + $project = [ + 'name' => 'Project 1', + 'user_id' => $user->id + ]; + $response = $this->actingAs($user) + ->withSession(['banned' => false]) + ->post('/api/v1/projects', $project); + $statusCode = $response->getStatusCode(); + if ($statusCode == 500){ //because project name unique, cant craete duplicate. + $response->assertStatus(500); + }else{ + $response->assertStatus(200); + } + $lp = Project::latest()->first(); + if ($statusCode == 200){ + $userTeams = User::where('role_id', '=', 3)->take(2)->get(); + foreach($userTeams as $key => $ut){ + $this->create_task($this->actingAs($user), $key, $ut, $user, $lp); + } + } + } + + + public function create_task($actingAs, $key, $ut, $user, $lp){ + $task = [ + 'title' => 'Task ' . $key, + 'description' => 'Task ' . $key, + 'project_id' => $lp->id, + 'status_id' => 1, //1 refers not startecd the task yet + 'user_id' => $ut->id, + ]; + $response = $actingAs + ->withSession(['banned' => false]) + ->post('/api/v1/tasks', $task); + $statusCode = $response->getStatusCode(); + if ($statusCode == 500){ + $response->assertStatus(500); + }else{ + $response->assertStatus(200); + } + } +} + diff --git a/tests/Feature/TaskTest.php b/tests/Feature/TaskTest.php new file mode 100644 index 0000000..b217a3c --- /dev/null +++ b/tests/Feature/TaskTest.php @@ -0,0 +1,35 @@ +first(); + $task = Task::where('status_id', '=', 1)->where('user_id', '=', $user->id)->first(); + if($task){ + $ts = [ + 'status_id' => 2, //2 refers status IN_PROGRESS + ]; + $response = $this->actingAs($user) + ->withSession(['banned' => false]) + ->patch('/api/v1/tasks/'. $task->id, $ts); + $statusCode = $response->getStatusCode(); + if ($statusCode == 500){ + $response->assertStatus(500); + }else{ + $response->assertStatus(200); + } + }else{ + $this->assertTrue(true); + } + } +} diff --git a/tests/Feature/UserTest.php b/tests/Feature/UserTest.php new file mode 100644 index 0000000..f8f0ffc --- /dev/null +++ b/tests/Feature/UserTest.php @@ -0,0 +1,94 @@ +get('/users'); + + $response->assertStatus(404); + } + public function test_user_product_owner_register() + { + $user = [ + 'name' => 'Product Owner', + 'email' => 'owner@test.com', + 'password' => 'passwordtest', + 'role_id' => 2 // PRODUCT_OWNER + ]; + + $response = $this->post('/api/auth/register', $user); + $statusCode = $response->getStatusCode(); + if ($statusCode == 401){ + $response->assertStatus(401); + }else{ + $response->assertStatus(200); + } + } + + public function test_user_team_member_one_register() + { + $user = [ + 'name' => 'Team Member 1', + 'email' => 'member1@test.com', + 'password' => 'passwordtest', + 'role_id' => 3 // TEAM_MEMBER + ]; + + $response = $this->post('/api/auth/register', $user); + $statusCode = $response->getStatusCode(); + if ($statusCode == 401){ + $response->assertStatus(401); + }else{ + $response->assertStatus(200); + } + } + + public function test_user_team_member_two_register() + { + $user = [ + 'name' => 'Team Member 2', + 'email' => 'member2@test.com', + 'password' => 'passwordtest', + 'role_id' => 3 // TEAM_MEMBER + ]; + + $response = $this->post('/api/auth/register', $user); + $statusCode = $response->getStatusCode(); + if ($statusCode == 401){ + $response->assertStatus(401); + }else{ + $response->assertStatus(200); + } + } + + public function test_user_team_member_three_register() + { + $user = [ + 'name' => 'Team Member 3', + 'email' => 'member3@test.com', + 'password' => 'passwordtest', + 'role_id' => 3 // TEAM_MEMBER + ]; + + $response = $this->post('/api/auth/register', $user); + $statusCode = $response->getStatusCode(); + if ($statusCode == 401){ + $response->assertStatus(401); + }else{ + $response->assertStatus(200); + } + } +}