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