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/GroupGameScore.php b/app/GroupMember.php
similarity index 68%
rename from app/GroupGameScore.php
rename to app/GroupMember.php
index 9bd86a4c85fae1a70ab1fca5b020e798f63e841e..c1b27c692c44de9c80d554e76713b91971d41137 100644
--- a/app/GroupGameScore.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_game_score';
+    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/GroupsMember.php b/app/GroupsMember.php
deleted file mode 100644
index 0fda24c2829eaf7ef78d2f480aa6718369700725..0000000000000000000000000000000000000000
--- a/app/GroupsMember.php
+++ /dev/null
@@ -1,51 +0,0 @@
-<?php
-
-namespace App;
-
-use Illuminate\Database\Eloquent\Model;
-
-class GroupsMember extends Model
-{
-    //
-    protected $table = 'groups_member';
-    public $incrementing = false;
-    protected $primaryKey = ['group_id', 'user_id']; 
-    /**
-     * Set the keys for a save update query.
-     *
-     * @param  \Illuminate\Database\Eloquent\Builder  $query
-     * @return \Illuminate\Database\Eloquent\Builder
-     */
-    protected function setKeysForSaveQuery(Builder $query)
-    {
-        $keys = $this->getKeyName();
-        if(!is_array($keys)){
-            return parent::setKeysForSaveQuery($query);
-        }
-
-        foreach($keys as $keyName){
-            $query->where($keyName, '=', $this->getKeyForSaveQuery($keyName));
-        }
-
-        return $query;
-    }
-
-    /**
-     * Get the primary key value for a save query.
-     *
-     * @param mixed $keyName
-     * @return mixed
-     */
-    protected function getKeyForSaveQuery($keyName = null)
-    {
-        if(is_null($keyName)){
-            $keyName = $this->getKeyName();
-        }
-
-        if (isset($this->original[$keyName])) {
-            return $this->original[$keyName];
-        }
-
-        return $this->getAttribute($keyName);
-    }
-}
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 f38b6a8ab083a9ace6ab0cc8cc01861e49fd3b3e..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
@@ -4,7 +4,7 @@ use Illuminate\Support\Facades\Schema;
 use Illuminate\Database\Schema\Blueprint;
 use Illuminate\Database\Migrations\Migration;
 
-class CreateGroupsMemberTable extends Migration
+class CreateGroupsDetailsTable extends Migration
 {
     /**
      * Run the migrations.
@@ -13,13 +13,14 @@ class CreateGroupsMemberTable extends Migration
      */
     public function up()
     {
-        Schema::create('groups_member', 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');
             $table->foreign('user_id')->references('id')->on('users');
             $table->primary(['group_id', 'user_id']);
             $table->string('role');
+            $table->unsignedInteger('high_score')->default(0);
             $table->timestamps();
         });
     }
@@ -31,6 +32,6 @@ class CreateGroupsMemberTable extends Migration
      */
     public function down()
     {
-        Schema::dropIfExists('groups_member');
+        Schema::dropIfExists('group_member');
     }
 }
diff --git a/database/migrations/2019_02_19_141501_create_group_game_score_table.php b/database/migrations/2019_02_19_141501_create_group_game_score_table.php
deleted file mode 100644
index 1a06ff63f965d76ff5dd2c9b77a1ccc9d769452e..0000000000000000000000000000000000000000
--- a/database/migrations/2019_02_19_141501_create_group_game_score_table.php
+++ /dev/null
@@ -1,34 +0,0 @@
-<?php
-
-use Illuminate\Support\Facades\Schema;
-use Illuminate\Database\Schema\Blueprint;
-use Illuminate\Database\Migrations\Migration;
-
-class CreateGroupGameScoreTable extends Migration
-{
-    /**
-     * Run the migrations.
-     *
-     * @return void
-     */
-    public function up()
-    {
-        Schema::create('group_game_score', function (Blueprint $table) {
-            $table->integer('group_id')->foreign('group_id')->references('id')->on('groups');
-            $table->integer('user_id')->foreign('user_id')->references('id')->on('users');
-            $table->primary(['group_id', 'user_id']);
-            $table->integer('score')->nullable();
-            $table->timestamps();
-        });
-    }
-
-    /**
-     * Reverse the migrations.
-     *
-     * @return void
-     */
-    public function down()
-    {
-        Schema::dropIfExists('group_game_score');
-    }
-}
diff --git a/routes/api.php b/routes/api.php
index e2b73fb43698361690726ec2f43f5a8349f27918..589874fd1e417359c1827bc6406af171b57b381c 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');