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,
|
\App\Http\Middleware\NormalizeLineEnding::class,
|
||||||
],
|
],
|
||||||
|
|
||||||
|
// 現時点では内部APIしかないので、認証の手間を省くためにステートフルにしている。
|
||||||
'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',
|
'throttle:60,1',
|
||||||
'bindings',
|
'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::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