| Current Path : /home/users/unlimited/www/api.xalonx.com/app/Http/Controllers/v1/ |
| Current File : /home/users/unlimited/www/api.xalonx.com/app/Http/Controllers/v1/ProductsController.php |
<?php
namespace App\Http\Controllers\v1;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Models\Products;
use App\Models\ProductCategory;
use App\Models\ProductSubCategory;
use App\Models\User;
use App\Models\Salon;
use App\Models\Individual;
use App\Models\Settings;
use Illuminate\Support\Arr;
use Validator;
use DB;
class ProductsController extends Controller
{
public function save(Request $request)
{
$validator = Validator::make($request->all(), [
'freelacer_id' => 'required',
'cover' => 'required',
'name' => 'required',
'images' => 'required',
'original_price' => 'required',
'sell_price' => 'required',
'discount' => 'required',
'cate_id' => 'required',
'sub_cate_id' => 'required',
'in_home' => 'required',
'is_single' => 'required',
'have_gram' => 'required',
'gram' => 'required',
'have_kg' => 'required',
'kg' => 'required',
'have_pcs' => 'required',
'pcs' => 'required',
'have_liter' => 'required',
'liter' => 'required',
'have_ml' => 'required',
'ml' => 'required',
'in_offer' => 'required',
'in_stock' => 'required',
'rating' => 'required',
'total_rating' => 'required',
]);
if ($validator->fails()) {
$response = [
'success' => false,
'message' => 'Validation Error.',
$validator->errors(),
'status' => 500
];
return response()->json($response, 404);
}
$data = Products::create($request->all());
if (is_null($data)) {
$response = [
'data' => $data,
'message' => 'error',
'status' => 500,
];
return response()->json($response, 200);
}
$response = [
'data' => $data,
'success' => true,
'status' => 200,
];
return response()->json($response, 200);
}
public function getById(Request $request)
{
$validator = Validator::make($request->all(), [
'id' => 'required',
]);
if ($validator->fails()) {
$response = [
'success' => false,
'message' => 'Validation Error.',
$validator->errors(),
'status' => 500
];
return response()->json($response, 404);
}
$data = Products::find($request->id);
if (is_null($data)) {
$response = [
'success' => false,
'message' => 'Data not found.',
'status' => 404
];
return response()->json($response, 404);
}
$related = Products::where(['status' => 1, 'freelacer_id' => $data->freelacer_id, 'sub_cate_id' => $data->sub_cate_id])->get();
$storeInfo = User::select('id', 'last_name', 'first_name', 'status')->where('id', $data->freelacer_id)->first();
$cateInfo = ProductCategory::where('id', $data->cate_id)->first();
$subCateInfo = ProductSubCategory::where('id', $data->sub_cate_id)->first();
$response = [
'data' => $data,
'related' => $related,
'cateInfo' => $cateInfo,
'subCateInfo' => $subCateInfo,
'soldby' => $storeInfo,
'success' => true,
'status' => 200,
];
return response()->json($response, 200);
}
public function update(Request $request)
{
$validator = Validator::make($request->all(), [
'id' => 'required',
]);
if ($validator->fails()) {
$response = [
'success' => false,
'message' => 'Validation Error.',
$validator->errors(),
'status' => 500
];
return response()->json($response, 404);
}
$data = Products::find($request->id)->update($request->all());
if (is_null($data)) {
$response = [
'success' => false,
'message' => 'Data not found.',
'status' => 404
];
return response()->json($response, 404);
}
$response = [
'data' => $data,
'success' => true,
'status' => 200,
];
return response()->json($response, 200);
}
public function updateStatus(Request $request)
{
$validator = Validator::make($request->all(), [
'id' => 'required',
]);
if ($validator->fails()) {
$response = [
'success' => false,
'message' => 'Validation Error.',
$validator->errors(),
'status' => 500
];
return response()->json($response, 404);
}
$data = Products::find($request->id)->update($request->only('status'));
if (is_null($data)) {
$response = [
'success' => false,
'message' => 'Data not found.',
'status' => 404
];
return response()->json($response, 404);
}
$response = [
'data' => $data,
'success' => true,
'status' => 200,
];
return response()->json($response, 200);
}
public function updateOffers(Request $request)
{
$validator = Validator::make($request->all(), [
'id' => 'required',
]);
if ($validator->fails()) {
$response = [
'success' => false,
'message' => 'Validation Error.',
$validator->errors(),
'status' => 500
];
return response()->json($response, 404);
}
$data = Products::find($request->id)->update($request->only('in_offer'));
if (is_null($data)) {
$response = [
'success' => false,
'message' => 'Data not found.',
'status' => 404
];
return response()->json($response, 404);
}
$response = [
'data' => $data,
'success' => true,
'status' => 200,
];
return response()->json($response, 200);
}
public function updateHome(Request $request)
{
$validator = Validator::make($request->all(), [
'id' => 'required',
]);
if ($validator->fails()) {
$response = [
'success' => false,
'message' => 'Validation Error.',
$validator->errors(),
'status' => 500
];
return response()->json($response, 404);
}
$data = Products::find($request->id)->update($request->only('in_home'));
if (is_null($data)) {
$response = [
'success' => false,
'message' => 'Data not found.',
'status' => 404
];
return response()->json($response, 404);
}
$response = [
'data' => $data,
'success' => true,
'status' => 200,
];
return response()->json($response, 200);
}
public function delete(Request $request)
{
$validator = Validator::make($request->all(), [
'id' => 'required',
]);
if ($validator->fails()) {
$response = [
'success' => false,
'message' => 'Validation Error.',
$validator->errors(),
'status' => 500
];
return response()->json($response, 404);
}
$data = Products::find($request->id);
if ($data) {
$data->delete();
$response = [
'data' => $data,
'success' => true,
'status' => 200,
];
return response()->json($response, 200);
}
$response = [
'success' => false,
'message' => 'Data not found.',
'status' => 404
];
return response()->json($response, 404);
}
public function getAll()
{
$data = DB::table('products')
->select('products.*', 'users.first_name as first_name', 'users.last_name as last_name')
->join('users', 'products.freelacer_id', 'users.id')
->get();
if (is_null($data)) {
$response = [
'success' => false,
'message' => 'Data not found.',
'status' => 404
];
return response()->json($response, 404);
}
$response = [
'data' => $data,
'success' => true,
'status' => 200,
];
return response()->json($response, 200);
}
public function getWithFreelancers(Request $request)
{
$validator = Validator::make($request->all(), [
'id' => 'required',
]);
if ($validator->fails()) {
$response = [
'success' => false,
'message' => 'Validation Error.',
$validator->errors(),
'status' => 500
];
return response()->json($response, 404);
}
$data = Products::where(['freelacer_id' => $request->id])->get();
$response = [
'data' => $data,
'success' => true,
'status' => 200,
];
return response()->json($response, 200);
}
public function getProducts(Request $request)
{
$validator = Validator::make($request->all(), [
'cate_id' => 'required',
'sub_cate_id' => 'required',
]);
if ($validator->fails()) {
$response = [
'success' => false,
'message' => 'Validation Error.',
$validator->errors(),
'status' => 500
];
return response()->json($response, 404);
}
$data = Products::where(['cate_id' => $request->cate_id, 'sub_cate_id' => $request->sub_cate_id])->get();
$response = [
'data' => $data,
'success' => true,
'status' => 200,
];
return response()->json($response, 200);
}
public function topProducts(Request $request)
{
$validator = Validator::make($request->all(), [
'lat' => 'required',
'lng' => 'required',
]);
if ($validator->fails()) {
$response = [
'success' => false,
'message' => 'Validation Error.',
$validator->errors(),
'status' => 500
];
return response()->json($response, 404);
}
$searchQuery = Settings::select('allowDistance', 'searchResultKind')->first();
if ($searchQuery->searchResultKind == 1) {
$values = 3959; // miles
$distanceType = 'miles';
} else {
$values = 6371; // km
$distanceType = 'km';
}
$salon = Salon::select(DB::raw('salon.uid as uid, ( ' . $values . ' * acos( cos( radians(' . $request->lat . ') ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(' . $request->lng . ') ) + sin( radians(' . $request->lat . ') ) * sin( radians( lat ) ) ) ) AS distance'))
->having('distance', '<', (int) $searchQuery->allowDistance)
->orderBy('distance')
->where(['salon.status' => 1, 'salon.in_home' => 1])
->get();
$freelancer = Individual::select(DB::raw('individual.uid as uid, ( ' . $values . ' * acos( cos( radians(' . $request->lat . ') ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(' . $request->lng . ') ) + sin( radians(' . $request->lat . ') ) * sin( radians( lat ) ) ) ) AS distance'))
->having('distance', '<', (int) $searchQuery->allowDistance)
->orderBy('distance')
->where(['individual.status' => 1, 'individual.in_home' => 1])
->get();
$salonUID = $salon->pluck('uid')->toArray();
$freelancerUID = $freelancer->pluck('uid')->toArray();
$uidArray = Arr::collapse([$salonUID, $freelancerUID]);
$products = Products::where('in_home', 1)->WhereIn('freelacer_id', $uidArray)->limit(10)->get();
$response = [
'products' => $products,
'success' => true,
'status' => 200,
];
return response()->json($response, 200);
}
public function getFreelancerProducts(Request $request)
{
$validator = Validator::make($request->all(), [
'id' => 'required',
]);
if ($validator->fails()) {
$response = [
'success' => false,
'message' => 'Validation Error.',
$validator->errors(),
'status' => 500
];
return response()->json($response, 404);
}
$data = Products::where(['freelacer_id' => $request->id, 'status' => 1])->get();
$response = [
'data' => $data,
'success' => true,
'status' => 200,
];
return response()->json($response, 200);
}
}