Your IP : 216.73.217.77


Current Path : /home/users/unlimited/www/egrocer.codeskitter.site/app/Http/Controllers/API/
Upload File :
Current File : /home/users/unlimited/www/egrocer.codeskitter.site/app/Http/Controllers/API/CityApiController.php

<?php

namespace App\Http\Controllers\API;

use App\Helpers\CommonHelper;
use App\Http\Controllers\Controller;
use App\Models\City;
use App\Models\Permission;
use App\Models\PermissionCategory;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;
use Spatie\Permission\Models\Role;

class CityApiController extends Controller
{
    /*public function index(Request $request){}*/

    public function getCities(Request $request){

        if(!$request->limit){
            return CommonHelper::responseWithData(City::orderBy('id','desc')->get());
        }

        $limit = $request->get('limit',5);
        $offset = $request->get('offset',0);

        $query = City::select('*');

        // Apply search filters
        if ($request->has('search')) {
            $searchTerm = $request->input('search');
            $query->where(function ($query) use ($searchTerm) {
                $query->where('name', 'like', '%'.$searchTerm.'%')
                    ->orWhere('zone', 'like', '%'.$searchTerm.'%')
                    ->orWhere('state', 'like', '%'.$searchTerm.'%')
                    ->orWhere('formatted_address', 'like', '%'.$searchTerm.'%')
                    ->orWhere('latitude', 'like', '%'.$searchTerm.'%')
                    ->orWhere('longitude', 'like', '%'.$searchTerm.'%')
                    ->orWhere('max_deliverable_distance', 'like', '%'.$searchTerm.'%');
            });
        }

        // Apply sorting
        if ($request->has('sort_by')) {
            $sortColumn = $request->input('sort_by', 'id');
            $sortDirection = $request->input('sort_dir', 'desc dvfd');
            $query->orderBy($sortColumn, $sortDirection);
        }

        // Get the total count for pagination
        $total = $query->count();
        $cities = $query->skip($offset)->take($limit)->get();

        $data = array(
            "total" => $total,
            "cities" => $cities
        );
        return CommonHelper::responseWithData($data);

    }

    public function save(Request $request){
        $validator = Validator::make($request->all(),[
            'latitude' => 'required',
            'longitude' => 'required',
            'name' => 'required',
            'zone' => 'required|unique:cities',
            'formatted_address' => 'required',
            'time_to_travel' => 'required',
            'delivery_charge_method' => 'required',
            'fixed_charge' => ($request->delivery_charge_method === 'fixed_charge')? 'required':'',
            'per_km_charge' => ($request->delivery_charge_method === 'per_km_charge')? 'required':'',
            'range_wise_charges' => ($request->delivery_charge_method === 'range_wise_charges')? 'required':''
        ],[
            'name.unique' => 'The :attribute has already been taken.',
        ],['name' => 'city name']);
        if ($validator->fails()) {
            return CommonHelper::responseError($validator->errors()->first());
        }
        $city = new City();
        $city->latitude = $request->latitude;
        $city->longitude = $request->longitude;
        $city->name = $request->name;
        $city->zone = $request->zone;
        $city->state = $request->state;
        $city->formatted_address = $request->formatted_address;
        $city->time_to_travel = $request->time_to_travel;
        $city->min_amount_for_free_delivery = $request->min_amount_for_free_delivery;
        $city->delivery_charge_method = $request->delivery_charge_method;
        $city->fixed_charge = ($request->fixed_charge)??0;
        $city->per_km_charge = ($request->per_km_charge)??0;
        $city->range_wise_charges = $request->range_wise_charges;
        $city->geolocation_type = $request->geolocation_type;
        $city->radius = $request->radius;
        $city->boundary_points = $request->boundary_points;
        $city->save();
        return CommonHelper::responseSuccess("City Saved Successfully!");
    }
    public function edit($id){
        $city = City::where('id',$id)->first();
        return CommonHelper::responseWithData($city);
    }

    public function update(Request $request){
        $validator = Validator::make($request->all(),[
            'latitude' => 'required',
            'longitude' => 'required',
            'name' =>'required',
            'zone' =>[ 'required',
                Rule::unique('cities')->where(function($query) use ($request) {
                    $query->where('id', '!=', $request->id);
                })
            ],
            'time_to_travel' => 'required',
            'delivery_charge_method' => 'required',
            'fixed_charge' => ($request->delivery_charge_method === 'fixed_charge')? 'required':'',
            'per_km_charge' => ($request->delivery_charge_method === 'per_km_charge')? 'required':'',
            'range_wise_charges' => ($request->delivery_charge_method === 'range_wise_charges')? 'required':'',
            'geolocation_type' => 'required',
            'boundary_points' => 'required',
        ],[
            'name.unique' => 'The :attribute has already been taken.',
        ],['name' => 'city name']);
        if ($validator->fails()) {
            return CommonHelper::responseError($validator->errors()->first());
        }
        $city = City::find($request->id);
        $city->latitude = $request->latitude;
        $city->longitude = $request->longitude;
        $city->name = $request->name;
        $city->zone = $request->zone;
        $city->state = $request->state;
        $city->formatted_address = $request->formatted_address;
        $city->time_to_travel = $request->time_to_travel;
        $city->min_amount_for_free_delivery = $request->min_amount_for_free_delivery;
        $city->max_deliverable_distance = $request->max_deliverable_distance;
        $city->delivery_charge_method = $request->delivery_charge_method;
        $city->fixed_charge = ($request->fixed_charge)?$request->fixed_charge:0;
        $city->per_km_charge = ($request->per_km_charge)?$request->per_km_charge:0;
        $city->range_wise_charges = $request->range_wise_charges;
        $city->geolocation_type = $request->geolocation_type;
        $city->radius = $request->radius;
        $city->boundary_points = $request->boundary_points;
        $city->save();
        return CommonHelper::responseSuccess("City Updated Successfully!");
    }

    public function save_boundary(Request $request){
        $validator = Validator::make($request->all(),[
            'geolocation_type' => 'required',
            'boundary_points' => 'required',
        ]);
        if ($validator->fails()) {
            return CommonHelper::responseError($validator->errors()->first());
        }
        $city = City::find($request->id);
        $city->geolocation_type = $request->geolocation_type;
        $city->radius = $request->radius;
        $city->boundary_points = $request->boundary_points;
        $city->save();
        return CommonHelper::responseSuccess("City Updated Successfully!");
    }

    public function delete(Request $request){
        if(isset($request->id)){
            $role = City::find($request->id);
            if($role){
                $role->delete();
                return CommonHelper::responseSuccess("City Deleted Successfully!");
            }else{
                return CommonHelper::responseSuccess("City Already Deleted!");
            }
        }
    }
}