diff --git a/app/Group.php b/app/Group.php
index 6a6124871cf270f0a477a593bf87b2b80a097bf9..90a9807dbba902c46aaeca2c749d5ca9290a5cbe 100644
--- a/app/Group.php
+++ b/app/Group.php
@@ -4,7 +4,17 @@ namespace App;
 
 use Illuminate\Database\Eloquent\Model;
 
+/**
+ * @property int $id
+ * @property string $group_name
+ * @property string $description
+ * @property string $created_at
+ * @property string $updated_at
+ */
 class Group extends Model
 {
-    //
-}
+    protected $table = 'groups';
+    protected $primaryKey = 'id';
+    protected $fillable = ['group_name', 'description', 'created_at', 'updated_at'];
+    public $timestamps = true;
+}
\ No newline at end of file
diff --git a/app/GroupDetails.php b/app/GroupMember.php
similarity index 71%
rename from app/GroupDetails.php
rename to app/GroupMember.php
index 828d8e5b6760ff755a39fcb603f70a9a6b1edc34..c1b27c692c44de9c80d554e76713b91971d41137 100644
--- a/app/GroupDetails.php
+++ b/app/GroupMember.php
@@ -4,13 +4,22 @@ namespace App;
 
 use Illuminate\Database\Eloquent\Model;
 
-class GroupGameScore extends Model
+/**
+ * @property int $group_id
+ * @property int $user_id
+ * @property string $role
+ * @property int $score
+ * @property string $created_at
+ * @property string $updated_at
+ * @property Group $group
+ * @property User $user
+ */
+class GroupMember extends Model
 {
-    //
     protected $table = 'group_details';
     public $incrementing = false;
     protected $primaryKey = ['group_id', 'user_id'];
-        /**
+    /**
      * Set the keys for a save update query.
      *
      * @param  \Illuminate\Database\Eloquent\Builder  $query
@@ -48,4 +57,12 @@ class GroupGameScore extends Model
 
         return $this->getAttribute($keyName);
     }
+
+    public function group() {
+        return $this->belongsTo('App\Group', 'group_id', 'group_id');
+    }
+
+    public function user() {
+        return $this->belongsTo('App\User', 'user_id', 'id');
+    }
 }
diff --git a/app/Http/Controllers/GroupController.php b/app/Http/Controllers/GroupController.php
new file mode 100644
index 0000000000000000000000000000000000000000..e032b47c79b802a46a050535b9551ea6bd9413b2
--- /dev/null
+++ b/app/Http/Controllers/GroupController.php
@@ -0,0 +1,110 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use Illuminate\Http\Request;
+use App\Group;
+
+class GroupController extends Controller
+{
+    public function store(Request $request) {
+        $validator = $this->validate($request);
+
+        if ($validator->fails()) {
+            return response(json_encode([
+                'statusMessage' => 'Bad Request'
+            ]), 400);
+        } else {
+            $input = $request->all();
+            $isGroupExist = Group::find($input['group_id']);
+
+            if (is_null($isGroupExist)) {
+                $group = Group::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);
+            }
+        }
+    }
+
+    public function show(Request $request, $groupId) {
+        $isGroupExist = Group::find($groupId);
+
+        if (is_null($isGroupExist)) {
+            return response(json_encode([
+                'statusMessage' => 'Not Found'
+            ]), 404);
+        } else {
+            $group = $isGroupExist->toArray();
+
+            return response(json_encode([
+                'statusMessage' => 'Success',
+                'data' => $group
+            ]), 200);
+        }
+    }
+
+    public function update(Request $request) {
+        $validator = $this->validate($request);
+
+        if ($validator->fails()) {
+            return response(json_encode([
+                'statusMessage' => 'Bad Request'
+            ]), 400);
+        } else {
+            $input = $request->all();
+            $isGroupExist = Group::find($input['group_id']);
+
+            if (is_null($isGroupExist)) {
+                return response(json_encode([
+                    'statusMessage' => 'Bad Request'
+                ]), 400);
+            } else {
+                $group = Group::create([
+                    'group_name' => $input['group_name'],
+                    'description' => $input['description']
+                ]);
+                $group->save();
+    
+                return response(json_encode([
+                    'statusMessage' => 'Success',
+                    'data' => $group->toArray()
+                ]), 200);
+            }
+        }
+    }
+
+    public function destroy($groupId) {
+        $group = Group::find($groupId);
+
+        if (is_null($group)) {
+            return response(json_encode([
+                'statusMessage' => 'Bad Request'
+            ]), 400);
+        } else {
+            $group->delete;
+
+            return response(json_encode([
+                'statusMessage' => 'Success'
+            ]), 200);
+        }
+    }
+
+    private function validate(Request $request) {
+        $input = $request->all();
+        return Validator::make($input, [
+            'group_name' => 'required'
+        ]);
+    }
+}
\ No newline at end of file
diff --git a/app/Http/Controllers/GroupMemberController.php b/app/Http/Controllers/GroupMemberController.php
new file mode 100644
index 0000000000000000000000000000000000000000..88e5ae73e1436531c7444b67e4608b2604058d7c
--- /dev/null
+++ b/app/Http/Controllers/GroupMemberController.php
@@ -0,0 +1,117 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use Illuminate\Http\Request;
+use App\Group;
+use App\GroupMember;
+use Validator;
+
+class GroupMemberController extends Controller
+{
+    public function store(Request $request) {
+        $validator = $this->validate($request);
+
+        if ($validator->fails()) {
+            return response(json_encode([
+                'statusMessage' => 'Bad Request'
+            ]), 400);
+        } else {
+            $input = $request->all();
+            $isGroupMemberExist = GroupMember::find($input['group_id'])::find($input['user_id']);
+            $groupMember = GroupMember::create([
+                'group_id' => $input['group_id'],
+                'user_id' => $input['user_id'],
+                'role' => $input['role'],
+                'high_score' => $input['high_score']
+            ]);
+
+            $group = Group::find($groupId);
+
+            if (is_null($group)) {
+                return response(json_encode([
+                    'statusMessage' => 'Bad Request'
+                ]), 400);
+            } else {
+                $groupMember->save();
+
+                return response(json_encode([
+                    'statusMessage' => ['Success'],
+                    'data' => $groupMember->toArray()
+                ]), 200);
+            }
+        }
+    }
+
+    public function show(Request $request, $groupId) {
+        $isGroupMemberExist = GroupMember::find($groupId);
+
+        if (is_null($groupMember)) {
+            return response(json_decode([
+                'statusMessage' => 'Not Found'
+            ]), 404);
+        } else {
+            $member = $group->toArray();
+
+            return response(json_encode([
+                'statusMessage' => 'Success',
+                'data' => $member
+            ]), 200);
+        }
+    }
+
+    public function update(Request $request, $groupId, $userId) {
+        $validator = $this->validate($request);
+
+        if ($validator->fails()) {
+            return response(json_encode([
+                'statusMessage' => 'Bad Request'
+            ]), 400);
+        } else {
+            $input = $request->all();
+            $groupMember = GroupMember::create([
+                'role' => $input['role'],
+                'high_score' => $input['high_score']
+            ]);
+
+            $member = GroupMember::find($groupId)->find($userId);
+            if ($member) {
+                $member->fill($groupMember);
+                $member->save();
+
+                return response(json_encode([
+                    'statusMessage' => 'Success',
+                    'data' => $member->toArray()
+                ]), 200);
+            } else {
+                return response(json_encode([
+                    'statusMessage' => 'Not Found'
+                ]), 404);
+            }
+        }
+    }
+
+    public function destroy($groupId, $userId) {        
+        $groupMember = GroupMember::find($groupId);
+
+        if (is_null($groupDetails)) {
+            return response(json_encode([
+                'statusMessage' => 'Bad Request'
+            ]), 400);
+        } else {
+            $groupMember->delete();
+
+            return response(json_encode([
+                'statusMessage' => 'Success'
+            ]), 200);
+        }
+    }
+
+    private function validate(Request $request) {
+        $input = $request->all();
+        return Validator::make($input, [
+            'role' => 'required',
+            'high_score' => 'required'
+        ]);
+    }
+}
\ No newline at end of file
diff --git a/database/migrations/2019_02_19_140044_create_groups_table.php b/database/migrations/2019_02_19_140044_create_groups_table.php
index 1e158d6208d4c0e858abb77d4e7e71af4b291828..461058bfa623cbc66324f1bd89772d66a4a1e6cd 100644
--- a/database/migrations/2019_02_19_140044_create_groups_table.php
+++ b/database/migrations/2019_02_19_140044_create_groups_table.php
@@ -16,7 +16,7 @@ class CreateGroupsTable extends Migration
         Schema::create('groups', function (Blueprint $table) {
             $table->increments('id');
             $table->string('group_name');
-            $table->string('description');            
+            $table->string('description')->default("");            
             $table->timestamps();
         });
     }
diff --git a/database/migrations/2019_02_19_140125_create_groups_member_table.php b/database/migrations/2019_02_19_140125_create_groups_member_table.php
index e722f1e177b9414a02da283df4a4a3fd4df4256e..5b017f833297da9b55b99b273dd352df649d8546 100644
--- a/database/migrations/2019_02_19_140125_create_groups_member_table.php
+++ b/database/migrations/2019_02_19_140125_create_groups_member_table.php
@@ -13,7 +13,7 @@ class CreateGroupsDetailsTable extends Migration
      */
     public function up()
     {
-        Schema::create('group_details', function (Blueprint $table) {
+        Schema::create('group_member', function (Blueprint $table) {
             $table->unsignedInteger('group_id');
             $table->foreign('group_id')->references('id')->on('groups');
             $table->unsignedInteger('user_id');
@@ -32,6 +32,6 @@ class CreateGroupsDetailsTable extends Migration
      */
     public function down()
     {
-        Schema::dropIfExists('group_details');
+        Schema::dropIfExists('group_member');
     }
 }
diff --git a/routes/api.php b/routes/api.php
index 5cc149ce5102ea7bc6216222b4455a58ed7bf8f7..aecf8deea4e66d7a452bf87cf048e4af613c69d8 100644
--- a/routes/api.php
+++ b/routes/api.php
@@ -22,8 +22,6 @@ Route::post('/login', 'UserController@generateToken');
 Route::post('/logout', 'UserController@logOut')->middleware('auth:api');
 
 
-
-
 //Task
 Route::post('/tasks', 'TaskController@store')->middleware('auth:api');
 Route::get('/tasks/{taskId}', 'TaskController@show')->middleware('auth:api');