diff --git a/app/GroupsMember.php b/app/GroupsMember.php index c565c23c53b9024b1a3cbe3a6d11e1c9d3aa5911..8bf1a5144aa02804433b1f991a37bd0fa15738d7 100644 --- a/app/GroupsMember.php +++ b/app/GroupsMember.php @@ -19,6 +19,9 @@ class GroupsMember extends Model protected $table = 'groups_member'; public $incrementing = false; protected $primaryKey = ['group_id', 'user_id']; + protected $fillable = [ + 'group_id', 'user_id' + ]; /** * Set the keys for a save update query. * diff --git a/app/Http/Controllers/GroupsController.php b/app/Http/Controllers/GroupsController.php index 152624eecf7ef29eb3a699d1859e83a5cf98e1a8..c96fa691296ad53a4a19337cf5241fb3f66d73f5 100644 --- a/app/Http/Controllers/GroupsController.php +++ b/app/Http/Controllers/GroupsController.php @@ -4,38 +4,39 @@ namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Groups; +use App\GroupsMember; +use Illuminate\Support\Facades\DB; class GroupsController extends Controller { public function store(Request $request) { - $validator = $this->validate($request); + $request->validate([ + 'group_name' => 'required', + 'description' => 'required', + 'user_id' => 'required', + ]); + $input = $request->all(); - if ($validator->fails()) { - return response(json_encode([ - 'statusMessage' => 'Bad Request' - ]), 400); - } else { - $input = $request->all(); - $isGroupExist = Groups::find($input['group_id']); + + DB::beginTransaction(); - if (is_null($isGroupExist)) { - $group = Groups::create([ - 'group_id' => $input['group_id'], - 'group_name' => $input['group_name'], - 'description' => $input['description'] - ]); - $group->save(); - - return response(json_encode([ - 'statusMessage' => 'Success', - 'data' => $group->toArray() - ]), 200); - } else { - return response(json_encode([ - 'statusMessage' => 'Bad Request' - ]), 400); - } - } + $group = Groups::create([ + 'group_name' => $input['group_name'], + 'description' => $input['description'], + ]); + GroupsMember::create([ + 'group_id' => $group['id'], + 'user_id' => $input['user_id'], + 'role' => $input['role'], + 'high_score' => 0 + ]); + + DB::commit(); + + return response(json_encode([ + 'statusMessage' => 'success', + 'data' => NULL + ]), 200); } public function show(Request $request, $groupId) { @@ -55,22 +56,22 @@ class GroupsController extends Controller } } - public function update(Request $request) { - $validator = $this->validate($request); + public function update(Request $request, $groupId) { + $validator = $this->validate2($request); if ($validator->fails()) { return response(json_encode([ 'statusMessage' => 'Bad Request' ]), 400); } else { - $input = $request->all(); - $isGroupExist = Groups::find($input['group_id']); + $isGroupExist = Groups::find($groupId); if (is_null($isGroupExist)) { return response(json_encode([ 'statusMessage' => 'Bad Request' ]), 400); } else { + $input = $request->all(); $group = Groups::create([ 'group_name' => $input['group_name'], 'description' => $input['description'] @@ -101,7 +102,7 @@ class GroupsController extends Controller } } - private function validate(Request $request) { + public function validate2(Request $request) { $input = $request->all(); return Validator::make($input, [ 'group_name' => 'required' @@ -109,6 +110,6 @@ class GroupsController extends Controller } public function tasks() { - $this->hasMany('App\Task', 'group_id'); + return $this->hasMany('App\Task', 'group_id'); } } \ No newline at end of file diff --git a/app/Http/Controllers/GroupsMemberController.php b/app/Http/Controllers/GroupsMemberController.php index 3128035535ef4cbf306994b43b721eada26d46d3..f9551355b05ac7c832c3c00f42a8243122b3476a 100644 --- a/app/Http/Controllers/GroupsMemberController.php +++ b/app/Http/Controllers/GroupsMemberController.php @@ -5,12 +5,17 @@ namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Groups; use App\GroupsMember; +use App\User; use Validator; +use Illuminate\Support\Facades\DB; class GroupsMemberController extends Controller { public function store(Request $request) { - $validator = $this->validate($request); + $validator = Validator::make($request->all(), [ + 'group_id' => 'required', + 'email' => 'required' + ]);; if ($validator->fails()) { return response(json_encode([ @@ -18,50 +23,61 @@ class GroupsMemberController extends Controller ]), 400); } else { $input = $request->all(); - $isGroupMemberExist = GroupsMember::find($input['group_id'])::find($input['user_id']); - $groupMember = GroupsMember::create([ - 'group_id' => $input['group_id'], - 'user_id' => $input['user_id'], - 'role' => $input['role'], - 'high_score' => $input['high_score'] - ]); + $user = User::where('email', $input['email'])->first(); + if (is_null($user)) { + return response(json_encode([ + 'statusMessage' => 'error', + 'data' => NULL + ]), 404); + } + $groupMember = GroupMember::where([ + 'user_id' => $user->id, + 'group_id' => $input['group_id'] + ])->first(); + - $group = Group::find($groupId); + $group = Group::find($input['group_id']); if (is_null($group)) { return response(json_encode([ 'statusMessage' => 'Bad Request' ]), 400); } else { - $groupMember->save(); - + if (is_null($groupMember)) { + $groupMember = GroupMember::create([ + 'group_id' => $input['group_id'], + 'user_id' => $user->id, + 'role' => $input['role'], + 'high_score' => 0 + ]); + } return response(json_encode([ - 'statusMessage' => ['Success'], + 'statusMessage' => 'success', 'data' => $groupMember->toArray() ]), 200); } } } - public function show(Request $request, $groupId) { - $isGroupMemberExist = GroupsMember::find($groupId); - - if (is_null($groupMember)) { - return response(json_decode([ - 'statusMessage' => 'Not Found' - ]), 404); - } else { - $member = $group->toArray(); + public function show(Request $request, $groupId, $userId) { + $group = Groups::find($groupId); + if (!is_null($group)) { + $users = DB::table('groups_member')->select('user_id', 'role', 'high_score','groups.created_at','groups.updated_at','group_id', 'group_name','description')->join('groups','groups_member.group_id','=','groups.id')->where('group_id',$groupId)->get(); return response(json_encode([ - 'statusMessage' => 'Success', - 'data' => $member + 'statusMessage' => 'success', + 'data' => $users->toArray() ]), 200); + } else { + return response(json_encode([ + 'statusMessage' => 'error', + 'data' => null + ]), 404); } } public function update(Request $request, $groupId, $userId) { - $validator = $this->validate($request); + $validator = $this->validate2($request); if ($validator->fails()) { return response(json_encode([ @@ -107,7 +123,7 @@ class GroupsMemberController extends Controller } } - private function validate(Request $request) { + private function validate2(Request $request) { $input = $request->all(); return Validator::make($input, [ 'role' => 'required', diff --git a/app/Http/Controllers/TasksController.php b/app/Http/Controllers/TasksController.php index b0ea7ad5460789d304535f499d94551e95a57b33..dbc6aae6d90a9036caf407b84a6b7af2367e0e4c 100644 --- a/app/Http/Controllers/TasksController.php +++ b/app/Http/Controllers/TasksController.php @@ -6,7 +6,7 @@ use Illuminate\Http\Request; use App\Tasks; use App\Groups; use App\TasksMember; -class TaskController extends Controller +class TasksController extends Controller { /** @@ -22,14 +22,15 @@ class TaskController extends Controller $result = $request->has([ 'group_id', 'taskname', - 'description' + 'description', + 'kanban_status' ]); if ($result) { $form = [ 'group_id' => $request->group_id, 'taskname' => $request->taskname, 'description' => $request->description, - 'status_kanban' => Config::get('constants.STATUS_KANBAN.PRODUCT_BACKLOG') + 'kanban_status' => $request->status_kanban ]; $task = Tasks::create($form); return response(json_encode([ @@ -82,16 +83,16 @@ class TaskController extends Controller { $user = $request->user(); $result = $request->has([ - 'taskname', + 'task_name', 'description', - 'status_kanban', + 'kanban_status', 'complexity' ]); if ($result) { $form = [ - 'taskname' => $request->taskname, + 'task_name' => $request->taskname, 'description' => $request->description, - 'status_kanban' => $request->status_kanban, + 'kanban_status' => $request->status_kanban, 'complexity' => $request->complexity ]; $task = Tasks::find($taskId)->first(); @@ -122,7 +123,7 @@ class TaskController extends Controller * @param int $id * @return \Illuminate\Http\Response */ - public function destroy($taskId) + public function destroy(Request $request, $taskId) { Tasks::destroy($taskId); return response(json_encode([ @@ -131,12 +132,11 @@ class TaskController extends Controller ]), 200); } - public function getTasksFromGroupId(Request $req, $groupId) { - $tasks = Groups::find($groupId)->tasks; + $tasks = Tasks::where('group_id', $groupId)->get(); return response(json_encode([ 'data' => $tasks->toArray(), 'statusMessage' => 'success' - ]), 400); + ]), 200); } } diff --git a/app/Http/Controllers/TasksMemberController.php b/app/Http/Controllers/TasksMemberController.php index e8346e262d0e944db8caa855ecff7eb4238f6fc4..3bed309c378e1a4bffd06781ec634500c9bd9725 100644 --- a/app/Http/Controllers/TasksMemberController.php +++ b/app/Http/Controllers/TasksMemberController.php @@ -7,16 +7,21 @@ use App\TasksMember; class TasksMemberController extends Controller { public function addMember(Request $request) { - $user = $request->user(); $result = $request->has([ 'task_id', 'user_id' ]); if ($result) { - $memberTask = TasksMember::create([ + $memberTask = TasksMember::where([ 'task_id' => $request->task_id, 'user_id' => $request->user_id - ]); + ])->first(); + if (is_null($memberTask)) { + $memberTask = TasksMember::create([ + 'task_id' => $request->task_id, + 'user_id' => $request->user_id + ]); + } return response(json_encode([ 'data' => $memberTask->toArray(), 'statusMessage'=> 'success', @@ -31,7 +36,6 @@ class TasksMemberController extends Controller public function removeMember(Request $request) { - $user = $request->user(); $result = $request->has([ 'task_id', 'user_id' @@ -41,7 +45,9 @@ class TasksMemberController extends Controller 'task_id' => $request->task_id, 'user_id' => $request->user_id ])->first(); - $memberTask->delete(); + if (!is_null($memberTask)) { + $memberTask->delete(); + } return response(json_encode([ 'data' => NULL, 'statusMessage'=> 'success', diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php index 98cc4cf80c45e2f70937a88790c58d3507f90178..a9fce09de34fb8f3487d3bd52eb6b077f9c5881c 100644 --- a/app/Http/Controllers/UserController.php +++ b/app/Http/Controllers/UserController.php @@ -69,4 +69,11 @@ class UserController extends Controller 'statusMessage'=> "success", ]), 200); } + + public function getGroups($userId){ + return response(json_encode([ + 'data' => User::getGroups($userId)->toArray(), + 'statusMessage'=> "success", + ]), 200); + } } diff --git a/app/Tasks.php b/app/Tasks.php index 11e661dcbe49f578a35ab1b77ffb1cfd50e9d94d..1d539079240a21644bcf990dcbe10e39be60c348 100644 --- a/app/Tasks.php +++ b/app/Tasks.php @@ -7,6 +7,11 @@ use Illuminate\Database\Eloquent\Model; class Tasks extends Model { + protected $fillable = [ + 'group_id', 'taskname', + 'description', 'status_kanban' + ]; + public function groups() { return $this->belongsTo('App\Groups', 'group_id'); diff --git a/app/TasksMember.php b/app/TasksMember.php index 3dd994de31799cd5ae94da35f937feae7e062b22..3fc6bb4d753a6c8aa43a541523ee67a1850bbed9 100644 --- a/app/TasksMember.php +++ b/app/TasksMember.php @@ -9,6 +9,9 @@ class TasksMember extends Model protected $table = 'tasks_member'; public $incrementing = false; protected $primaryKey = ['task_id', 'user_id']; + protected $fillable = [ + 'task_id', 'user_id', + ]; /** * Set the keys for a save update query. * diff --git a/app/User.php b/app/User.php index d9f93fa7e28f76b9f26bb078e7d970660eaf4f0e..0f83c51d5e62e7026d8a381270ce2fa9a55b544c 100644 --- a/app/User.php +++ b/app/User.php @@ -6,6 +6,10 @@ use Illuminate\Notifications\Notifiable; use Laravel\Passport\HasApiTokens; use Illuminate\Contracts\Auth\MustVerifyEmail; use Illuminate\Foundation\Auth\User as Authenticatable; +use Nexmo\Network\Number\Request; +use App\GroupMember; +use Illuminate\Support\Facades\App; +use Illuminate\Support\Facades\DB; class User extends Authenticatable { @@ -37,4 +41,9 @@ class User extends Authenticatable protected $casts = [ 'email_verified_at' => 'datetime', ]; + + public static function getGroups($userId) { + $groups = DB::table('group_member')->select('user_id','high_score','groups.created_at','groups.updated_at','group_id', 'group_name','description')->join('groups','group_member.group_id','=','groups.id')->where('user_id',$userId)->get(); + return $groups; + } } diff --git a/database/seeds/DatabaseSeeder.php b/database/seeds/DatabaseSeeder.php index f44f19b76cfa8edbfc1ce9bbcdf71301942c4e7d..712c15a510fe68cbfacebf69357db07733d1404f 100644 --- a/database/seeds/DatabaseSeeder.php +++ b/database/seeds/DatabaseSeeder.php @@ -13,6 +13,5 @@ class DatabaseSeeder extends Seeder $this->call(UsersTableSeeder::class); $this->call(GroupsTableSeeder::class); $this->call(TasksTableSeeder::class); - // $users = factory(App\User::class, 6)->create(); } } diff --git a/routes/api.php b/routes/api.php index 4ecce869f30f3978371b521cc4b03b67718c1073..abfb33f88bb2bb6ab757221e656d640afed69d93 100644 --- a/routes/api.php +++ b/routes/api.php @@ -22,29 +22,32 @@ Route::post('/login', 'UserController@generateToken'); Route::post('/logout', 'UserController@logOut'); +//User +Route::get('/user/{userId}/groups', 'UserController@getGroups'); //Bisa //Ambil Group yang dipunyai user + + //Task -Route::post('/tasks', 'TasksController@store'); +Route::post('/tasks', 'TasksController@store'); //Bisa Menambah task Route::get('/tasks/{taskId}', 'TasksController@show'); Route::put('/tasks/{taskId}', 'TasksController@update'); -Route::delete('/tasks/{taskId}', 'TasksController@delete'); +Route::delete('/tasks/{taskId}', 'TasksController@destroy'); //Bisa //Hapus Task //Task Member -Route::delete('/task_member', 'TasksMemberController@removeMember'); -Route::post('/task_member', 'TasksMemberController@addMember'); +Route::delete('/task_member', 'TasksMemberController@removeMember'); //Bisa //delete member di task +Route::post('/task_member', 'TasksMemberController@addMember'); //Bisa //Tambah member task //Get Group Task -Route::get('/group/{groupId}/tasks', 'TasksController@getTasksFromGroup'); +Route::get('/group/{groupId}/tasks', 'TasksController@getTasksFromGroupId'); //Bisa , ambil tasks dari suatu group //Group -Route::post('/group', 'GroupsController@store'); -Route::get('/group/{groupId}', 'GroupsController@show'); +Route::post('/group', 'GroupsController@store'); //Bisa //Bikin Group +Route::get('/group/{groupId}', 'GroupsController@show'); // Bisa , ambil detail group Route::put('/group/{groupId}', 'GroupsController@update'); Route::delete('/group/{groupId}', 'GroupsController@delete'); //GroupMember -Route::post('/group/member', 'GroupsMemberController@store'); -Route::get('/group/{groupId}/member', 'GroupsMemberController@show'); -Route::get('/group/{groupId}/members', 'GroupsMemberController@showAll'); +Route::post('/group/member', 'GroupsMemberController@store'); //Bisa nambah Group Member +Route::get('/group/{groupId}/members', 'GroupsMemberController@show'); //Bisa ambil seluruh member dari suatu group Route::put('/group/{groupId}/member/{userId}', 'GroupsMemberController@update'); Route::delete('/group/{groupId}/member/{userId}', 'GroupsMemberController@delete');