File: /var/www/console.fixgini.com/app/Http/Controllers/Admin/CountryController.php
<?php
namespace App\Http\Controllers\Admin;
use App\Models\City;
use App\Models\State;
use GuzzleHttp\Client;
use App\Models\Country;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
use App\Http\Controllers\Controller;
class CountryController extends Controller
{
public function location()
{
$client = new Client();
try {
$response = $client->post('https://www.googleapis.com/geolocation/v1/geolocate?key=AIzaSyAz2O3wS3rGltDhV9YFMSk0d1GyySIUfDk', [
'json' => [
'considerIp' => true, // Automatically uses the request's IP
],
]);
$location = json_decode($response->getBody(), true);
return $location;
} catch (\GuzzleHttp\Exception\RequestException $e) {
// Handle the error
return [
'error' => true,
'message' => $e->getMessage(),
];
}
}
public function listCountry()
{
$country = Country::all();
if ($country) {
return response()->json(['status' => 'success', 'data' => $country]);
} else {
return response()->json(['status' => 'error', 'data' => []]);
}
}
public function getCountry(Request $request)
{
try {
// Validate the query parameter
$validatedData = $request->validate([
'country_id' => 'required',
]);
// Fetch the states for the country
$states = Country::with('states')->where('id', $validatedData['country_id'])->get();
return response()->json(['status' => 'success', 'data' => $states], 200);
} catch (\Throwable $th) {
Log::error($th->getMessage());
return response()->json(['status' => 'error', 'message' => 'Failed to retrieve location data', 'error' => $th->getMessage()], 500);
}
}
public function getState(Request $request)
{
try {
$validatedData = $request->validate([
'state_id' => 'required',
]);
$cities = State::where('id', $validatedData['state_id'])->with('cities')->get();
return response()->json(['status' => 'success', 'data' => $cities], 200);
} catch (\Throwable $th) {
Log::error($th->getMessage());
return response()->json(['status' => 'error', 'message' => 'failed to retrieve location data', 'error' => $th->getMessage()], 500);
}
}
public function list()
{
try {
$countries = Country::with('states')->with('cities')->get();
return response()->json(['status' => 'success', 'data' => $countries], 200);
} catch (\Throwable $th) {
Log::error($th->getMessage());
return response()->json(['status' => 'error', 'data' => 'failed to list countrt'], 500);
}
}
public function listStates()
{
try {
$states = State::all();
return response()->json(['status' => 'success', 'data' => $states], 200);
} catch (\Throwable $th) {
Log::error($th->getMessage());
return response()->json(['status' => 'error', 'data' => 'failed to list states'], 500);
}
}
public function listCities()
{
try {
$cities = City::all();
return response()->json(['status' => 'success', 'data' => $cities], 200);
} catch (\Throwable $th) {
Log::error($th->getMessage());
return response()->json(['status' => 'error', 'data' => 'failed to list cities'], 500);
}
}
public function save(Request $request)
{
try {
$validatedData = $request->validate([
'name' => 'required|unique:countries,name',
'dial_code' => 'required',
'symbol' => 'required',
'flag_url' => 'required',
]);
if ($request->hasFile('flag_url')) {
$uploadedFile = $request->file('flag_url')->getRealPath();
// Upload to Cloudinary with transformation
$uploadResult = cloudinary()->upload($uploadedFile, [
'folder' => 'countryIcons',
'transformation' => [
'width' => 36,
'height' => 19,
'crop' => 'fill', // Ensures the image fits the dimensions
],
]);
$uploadedFileUrl = $uploadResult->getSecurePath();
$publicId = $uploadResult->getPublicId();
}
$countries = Country::create([
'name' => $validatedData['name'],
'dial_code' => $validatedData['dial_code'],
'symbol' => $validatedData['symbol'],
'flag_url' => $uploadedFileUrl,
'flag_public_id' => $publicId,
]);
return response()->json(['status' => 'success', 'message' => 'Country saved successfully', 'data' => $countries], 200);
} catch (\Throwable $th) {
Log::error($th->getMessage());
return response()->json(['status' => 'error', 'message' => 'failed to save country', 'data' => $th->getMessage()], 500);
}
}
public function saveState(Request $request)
{
try {
$validatedData = $request->validate([
'name' => 'required|unique:states,name',
'country_id' => 'required|exists:countries,id',
]);
$state = State::create([
'name' => $validatedData['name'],
'country_id' => $validatedData['country_id'],
]);
return response()->json(['status' => 'success', 'data' => $state], 200);
} catch (\Throwable $th) {
Log::error($th->getMessage());
return response()->json(['status' => 'error', 'data' => 'failed to save state', 'message' => $th->getMessage()], 500);
}
}
public function saveCity(Request $request)
{
try {
$validatedData = $request->validate([
'name' => 'required|unique:cities,name',
'state_id' => 'required|exists:states,id',
'country_id' => 'required|exists:countries,id',
]);
$city = City::create([
'name' => $validatedData['name'],
'state_id' => $validatedData['state_id'],
'country_id' => $validatedData['country_id'],
]);
return response()->json(['status' => 'success', 'data' => $city], 200);
} catch (\Throwable $th) {
Log::error($th->getMessage());
return response()->json(['status' => 'error', 'data' => 'failed to save state', 'message' => $th->getMessage()], 500);
}
}
public function updateCountry(Request $request, $id)
{
try {
$validatedData = $request->validate([
'name' => 'sometimes',
'dial_code' => 'sometimes',
'symbol' => 'sometimes',
]);
$country = Country::findOrFail($id);
$country->update([
'name' => $validatedData['name'],
'dial_code' => $validatedData['dial_code'],
'symbol' => $validatedData['symbol'],
'flag_url' => $request->input('flag_url', $country->flag_url),
]);
return response()->json(['status' => 'success', 'data' => $country], 200);
} catch (\Throwable $th) {
Log::error($th->getMessage());
return response()->json(['status' => 'error', 'data' => 'failed to update country', 'message' => $th->getMessage()], 500);
}
}
public function updateState(Request $request, $id)
{
try {
$validatedData = $request->validate([
'name' => 'required|unique:states,name,' . $id,
'country_id' => 'required|exists:countries,id',
]);
$state = State::findOrFail($id);
$state->update([
'name' => $validatedData['name'],
'country_id' => $validatedData['country_id'],
]);
return response()->json(['status' => 'success', 'data' => $state], 200);
} catch (\Throwable $th) {
Log::error($th->getMessage());
return response()->json(['status' => 'error', 'data' => 'failed to update state', 'message' => $th->getMessage()], 500);
}
}
public function updateCity(Request $request, $id)
{
try {
$validatedData = $request->validate([
'name' => 'required|unique:cities,name,' . $id,
'state_id' => 'required|exists:states,id',
'country_id' => 'required|exists:countries,id',
]);
$city = City::findOrFail($id);
$city->update([
'name' => $validatedData['name'],
'state_id' => $validatedData['state_id'],
'country_id' => $validatedData['country_id'],
]);
return response()->json(['status' => 'success', 'data' => $city], 200);
} catch (\Throwable $th) {
Log::error($th->getMessage());
return response()->json(['status' => 'error', 'data' => 'failed to update city', 'message' => $th->getMessage()], 500);
}
}
public function deleteCountry($id)
{
try {
$country = Country::findOrFail($id);
$country->delete();
return response()->json(['status' => 'success', 'message' => 'Country deleted successfully'], 200);
} catch (\Throwable $th) {
Log::error($th->getMessage());
return response()->json(['status' => 'error', 'data' => 'failed to delete country', 'message' => $th->getMessage()], 500);
}
}
public function deleteState($id)
{
try {
$state = State::findOrFail($id);
$state->delete();
return response()->json(['status' => 'success', 'message' => 'State deleted successfully'], 200);
} catch (\Throwable $th) {
Log::error($th->getMessage());
return response()->json(['status' => 'error', 'data' => 'failed to delete state', 'message' => $th->getMessage()], 500);
}
}
public function deleteCity($id)
{
try {
$city = City::findOrFail($id);
$city->delete();
return response()->json(['status' => 'success', 'message' => 'City deleted successfully'], 200);
} catch (\Throwable $th) {
Log::error($th->getMessage());
return response()->json(['status' => 'error', 'data' => 'failed to delete city', 'message' => $th->getMessage()], 500);
}
}
}