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');