60 lines
1.4 KiB
PHP
60 lines
1.4 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\API;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\Http\Resources\CityResource;
|
|
use App\Models\City;
|
|
use Illuminate\Http\Request;
|
|
|
|
class FavoriteController extends Controller
|
|
{
|
|
/**
|
|
* Get user's favorite cities
|
|
*/
|
|
public function index(Request $request)
|
|
{
|
|
$favorites = $request->user()
|
|
->favoriteCities()
|
|
->withCount('attractions')
|
|
->get();
|
|
|
|
return CityResource::collection($favorites);
|
|
}
|
|
|
|
/**
|
|
* Add city to favorites
|
|
*/
|
|
public function store(Request $request, City $city)
|
|
{
|
|
$user = $request->user();
|
|
|
|
// Check if already favorited
|
|
if ($user->favoriteCities()->where('city_id', $city->id)->exists()) {
|
|
return response()->json([
|
|
'message' => 'City already in favorites',
|
|
], 409);
|
|
}
|
|
|
|
$user->favoriteCities()->attach($city->id);
|
|
|
|
return response()->json([
|
|
'message' => 'City added to favorites',
|
|
'city' => new CityResource($city),
|
|
], 201);
|
|
}
|
|
|
|
/**
|
|
* Remove city from favorites
|
|
*/
|
|
public function destroy(Request $request, City $city)
|
|
{
|
|
$user = $request->user();
|
|
$user->favoriteCities()->detach($city->id);
|
|
|
|
return response()->json([
|
|
'message' => 'City removed from favorites',
|
|
]);
|
|
}
|
|
}
|