diff --git a/app/Comment.php b/app/Comment.php new file mode 100644 index 0000000000000000000000000000000000000000..be8d264131226c54d71f69e88acaadd94db3abe7 --- /dev/null +++ b/app/Comment.php @@ -0,0 +1,15 @@ +<?php + +namespace App; + +use Illuminate\Database\Eloquent\Model; + +class Comment extends Model +{ + protected $table = 'comments'; + protected $primaryKey = 'id'; + protected $fillable = ['task_id', 'comment', 'user_id']; + public $timestamps = true; + + +} diff --git a/app/Http/Controllers/CommentController.php b/app/Http/Controllers/CommentController.php new file mode 100644 index 0000000000000000000000000000000000000000..ded965bc74da1344039760e4f8fa08432a59b64a --- /dev/null +++ b/app/Http/Controllers/CommentController.php @@ -0,0 +1,43 @@ +<?php + +namespace App\Http\Controllers; + +use Illuminate\Http\Request; +use App\Tasks; +use App\Comment; +class CommentController extends Controller +{ + // + + public function getCommentsFromTaskId($taskId) { + $task = Tasks::where('id', $taskId)->first(); + if (is_null($task)) { + return response(json_encode([ + 'statusMessage' => 'error' + ]), 404); + } else { + $comments = $task->getCommentsAttribute(); + return response(json_encode([ + 'data' => $comments->toArray(), + 'statusMessage' => 'success' + ]), 200); + } + } + + public function createCommentInTaskId(Request $request, $userId, $taskId) { + $request->validate([ + 'comment' => 'required', + ]); + + $comment = Comment::create([ + 'comment' => $request->comment, + 'task_id' => $taskId, + 'user_id' => $userId + ]); + + return response(json_encode([ + 'data' => NULL, + 'statusMessage' => 'success' + ]), 200); + } +} diff --git a/app/Http/Controllers/TasksController.php b/app/Http/Controllers/TasksController.php index 590382fa827422de04419d6905c01d2ec625ab8e..b69cc3694e844c72c286d542b0719cdfab356be2 100644 --- a/app/Http/Controllers/TasksController.php +++ b/app/Http/Controllers/TasksController.php @@ -38,7 +38,7 @@ class TasksController extends Controller ]; $task = Tasks::create($form); return response(json_encode([ - 'data' => NULL, + 'data' => $task->toArray(), 'statusMessage' => 'success' ]), 200); } else { diff --git a/app/Tasks.php b/app/Tasks.php index 364c3a9a5a7a0ba98faf0a00bb6d490c5b38c8e8..fd09260a8563ad13fc30085cf6997ba640782a81 100644 --- a/app/Tasks.php +++ b/app/Tasks.php @@ -100,4 +100,16 @@ class Tasks extends Model // public function loggingInsertHistory(Tasks $item){ // } + + + public function comments() + { + return $this->hasMany('App\Comment', 'task_id'); + } + + public function getCommentsAttribute() + { + $comments = $this->comments()->getQuery()->orderBy('created_at', 'desc')->get(); + return $comments; + } } diff --git a/database/factories/CommentsFactory.php b/database/factories/CommentsFactory.php new file mode 100644 index 0000000000000000000000000000000000000000..25c39ff3eb50d41eaa7851f0eac575e9495a1b82 --- /dev/null +++ b/database/factories/CommentsFactory.php @@ -0,0 +1,23 @@ +<?php + +use Illuminate\Support\Str; +use Faker\Generator as Faker; + +/* +|-------------------------------------------------------------------------- +| Model Factories +|-------------------------------------------------------------------------- +| +| This directory should contain each of the model factory definitions for +| your application. Factories provide a convenient way to generate new +| model instances for testing / seeding your application's database. +| +*/ + +$factory->define(App\Comment::class, function (Faker $faker) { + return [ + 'user_id' => App\User::pluck('id')->random(), + 'comment' => $faker->text($maxNbChars = 50), + 'task_id' => App\Tasks::pluck('id')->random() + ]; +}); \ No newline at end of file diff --git a/database/factories/GroupsMemberFactory.php b/database/factories/GroupsMemberFactory.php index 888277fbf4ca3507d8b6780bbdf9b365dded0b28..c367113bd527d79cbb0e5ee7fe3a8a65dbb8ef84 100644 --- a/database/factories/GroupsMemberFactory.php +++ b/database/factories/GroupsMemberFactory.php @@ -1,6 +1,5 @@ <?php -use Illuminate\Support\Str; use Faker\Generator as Faker; /* diff --git a/database/migrations/2019_02_25_062350_create_comments_table.php b/database/migrations/2019_02_25_062350_create_comments_table.php new file mode 100644 index 0000000000000000000000000000000000000000..0095f9682cb8db8cf5daf0e7b749fefbf77b4aed --- /dev/null +++ b/database/migrations/2019_02_25_062350_create_comments_table.php @@ -0,0 +1,40 @@ +<?php + +use Illuminate\Support\Facades\Schema; +use Illuminate\Database\Schema\Blueprint; +use Illuminate\Database\Migrations\Migration; + +class CreateCommentsTable extends Migration +{ + /** + * Run the migrations. + * + * @return void + */ + public function up() + { + Schema::create('comments', function (Blueprint $table) { + $table->increments('id'); + $table->unsignedInteger('task_id'); + $table->foreign('task_id') + ->references('id')->on('tasks') + ->onDelete('cascade'); + $table->unsignedInteger('user_id'); + $table->foreign('user_id') + ->references('id')->on('users') + ->onDelete('cascade'); + $table->string('comment'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('comments'); + } +} diff --git a/database/seeds/DatabaseSeeder.php b/database/seeds/DatabaseSeeder.php index a19efefc6b768b1800c16b883bdea38c7b8697bc..bbd5218adae91d21ea3fa8231388f9aae3a90517 100644 --- a/database/seeds/DatabaseSeeder.php +++ b/database/seeds/DatabaseSeeder.php @@ -13,5 +13,6 @@ class DatabaseSeeder extends Seeder // $this->call(UsersTableSeeder::class); $this->call(GroupsTableSeeder::class); $this->call(TasksTableSeeder::class); + factory(App\Comment::class, 1000)->create(); } } diff --git a/routes/api.php b/routes/api.php index b6edc4878712aef3f1d519333954c3ac76d84a10..596c5379a1dafbba5b3e57ba591ff0ad2ed80884 100644 --- a/routes/api.php +++ b/routes/api.php @@ -57,6 +57,10 @@ Route::delete('/group/{groupId}/member/{userId}', 'GroupsMemberController@delete //Get History Group Route::get('/group/{groupId}/history', 'GroupHistoryController@getHistory'); //Bisa ambil seluruh member dari suatu group + +Route::post('/user/{userId}/task/{taskId}/comment', 'CommentController@createCommentInTaskId'); +Route::get('/task/{taskId}/comment', 'CommentController@getCommentsFromTaskId'); + // Route::group(['middleware' => 'auth:api'], function() // { // Route::resource('tasks','TasksController', ['except' => ['index', 'edit', 'create']]);