Like APIの追加
This commit is contained in:
parent
212fad4d66
commit
34b7cd6c89
71
app/Http/Controllers/Api/LikeController.php
Normal file
71
app/Http/Controllers/Api/LikeController.php
Normal file
@ -0,0 +1,71 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api;
|
||||
|
||||
use App\Ejaculation;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Like;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
|
||||
class LikeController extends Controller
|
||||
{
|
||||
public function store(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'id' => 'required|integer|exists:ejaculations'
|
||||
]);
|
||||
|
||||
$keys = [
|
||||
'user_id' => Auth::id(),
|
||||
'ejaculation_id' => $request->input('id')
|
||||
];
|
||||
|
||||
$like = Like::query()->where($keys)->first();
|
||||
if ($like) {
|
||||
$data = [
|
||||
'errors' => [
|
||||
['message' => 'このチェックインはすでにいいね済です。']
|
||||
],
|
||||
'ejaculation' => $like->ejaculation
|
||||
];
|
||||
return response()->json($data, 409);
|
||||
}
|
||||
|
||||
$like = Like::create($keys);
|
||||
return [
|
||||
'ejaculation' => $like->ejaculation
|
||||
];
|
||||
}
|
||||
|
||||
public function destroy($id)
|
||||
{
|
||||
Validator::make(compact('id'), [
|
||||
'id' => 'required|integer'
|
||||
])->validate();
|
||||
|
||||
$like = Like::query()->where([
|
||||
'user_id' => Auth::id(),
|
||||
'ejaculation_id' => $id
|
||||
])->first();
|
||||
if ($like === null) {
|
||||
$ejaculation = Ejaculation::find($id);
|
||||
|
||||
$data = [
|
||||
'errors' => [
|
||||
['message' => 'このチェックインはいいねされていません。']
|
||||
],
|
||||
'ejaculation' => $ejaculation
|
||||
];
|
||||
|
||||
return response()->json($data, 404);
|
||||
}
|
||||
|
||||
$like->delete();
|
||||
|
||||
return [
|
||||
'ejaculation' => $like->ejaculation
|
||||
];
|
||||
}
|
||||
}
|
@ -38,7 +38,12 @@ class Kernel extends HttpKernel
|
||||
\App\Http\Middleware\NormalizeLineEnding::class,
|
||||
],
|
||||
|
||||
// 現時点では内部APIしかないので、認証の手間を省くためにステートフルにしている。
|
||||
'api' => [
|
||||
\App\Http\Middleware\EncryptCookies::class,
|
||||
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
|
||||
\Illuminate\Session\Middleware\StartSession::class,
|
||||
\App\Http\Middleware\VerifyCsrfToken::class,
|
||||
'throttle:60,1',
|
||||
'bindings',
|
||||
],
|
||||
|
20
app/Like.php
Normal file
20
app/Like.php
Normal file
@ -0,0 +1,20 @@
|
||||
<?php
|
||||
|
||||
namespace App;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class Like extends Model
|
||||
{
|
||||
protected $fillable = ['user_id', 'ejaculation_id'];
|
||||
|
||||
public function user()
|
||||
{
|
||||
return $this->belongsTo(User::class);
|
||||
}
|
||||
|
||||
public function ejaculation()
|
||||
{
|
||||
return $this->belongsTo(Ejaculation::class)->withLikes();
|
||||
}
|
||||
}
|
37
database/migrations/2019_03_26_224641_create_likes_table.php
Normal file
37
database/migrations/2019_03_26_224641_create_likes_table.php
Normal file
@ -0,0 +1,37 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
|
||||
class CreateLikesTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::create('likes', function (Blueprint $table) {
|
||||
$table->increments('id');
|
||||
$table->integer('user_id')->index();
|
||||
$table->integer('ejaculation_id')->index();
|
||||
$table->timestamps();
|
||||
|
||||
$table->unique(['user_id', 'ejaculation_id']);
|
||||
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
|
||||
$table->foreign('ejaculation_id')->references('id')->on('ejaculations')->onDelete('cascade');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::dropIfExists('likes');
|
||||
}
|
||||
}
|
@ -16,3 +16,8 @@
|
||||
//});
|
||||
|
||||
Route::get('/checkin/card', 'Api\\CardController@show');
|
||||
|
||||
Route::middleware('auth')->group(function () {
|
||||
Route::post('/likes', 'Api\\LikeController@store');
|
||||
Route::delete('/likes/{id}', 'Api\\LikeController@destroy');
|
||||
});
|
Loading…
Reference in New Issue
Block a user