From 65961b3e591ac9f8d4088d7cea26ebdc7fc6a314 Mon Sep 17 00:00:00 2001 From: Farhan <mfarhan0304@gmail.com> Date: Thu, 21 Feb 2019 18:37:13 +0700 Subject: [PATCH] finish groups API --- app/Group.php | 14 ++- app/{GroupDetails.php => GroupMember.php} | 23 +++- app/Http/Controllers/GroupController.php | 110 ++++++++++++++++ .../Controllers/GroupMemberController.php | 117 ++++++++++++++++++ .../2019_02_19_140044_create_groups_table.php | 2 +- ...2_19_140125_create_groups_member_table.php | 4 +- routes/api.php | 2 - 7 files changed, 262 insertions(+), 10 deletions(-) rename app/{GroupDetails.php => GroupMember.php} (71%) create mode 100644 app/Http/Controllers/GroupController.php create mode 100644 app/Http/Controllers/GroupMemberController.php diff --git a/app/Group.php b/app/Group.php index 6a61248..90a9807 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 828d8e5..c1b27c6 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 0000000..e032b47 --- /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 0000000..88e5ae7 --- /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 1e158d6..461058b 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 e722f1e..5b017f8 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 5cc149c..aecf8de 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'); -- GitLab