File: /var/www/vhost/disk-apps/qas.sports-crowd.com/app/Http/Controllers/Api/BusinessApiController.php
<?php
namespace App\Http\Controllers\Api;
use App\Address;
use App\Businesses;
use App\Http\Controllers\Controller;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Storage;
class BusinessApiController extends Controller
{
public function register(Request $request)
{
$user_id = Auth::user()->id;
$direction = $request["businessAddress"];
$addressData = [
'direction' => $direction,
'user_id' => $user_id,
'active' => true,
'lat' =>$request['businessLatitude'],
'long' =>$request['businessLongitude']
];
if ($request['id']) {
$business = Businesses::where('id', $request['id'])->first();
$address = Address::where('id', $business->address_id)->first();
$address->update($addressData);
} else {
$address = Address::create($addressData);
}
$businessData = [
'name' => $request['name'],
'description' => $request['description'],
'phone' => $request['phone'],
'age' => $request['age'],
'instagram' => $request['business_instagram'],
'facebook' => $request['business_facebook'],
'user_id' => $user_id,
'category_id' => $request['category'],
'address_id' => $address->id,
'website' => $request['website'],
'phone' => $request['phone']['nationalNumber'] ?? $request['phone'] ?? null,
'dial_code' => $request['phone']['dialCode'],
'country_code' => $request['phone']['countryCode'],
];
if ($request['id']) {
$business->update($businessData);
} else {
$business = Businesses::create($businessData);
}
if ($request['image']) {
$this->uploadImage($request['image'], $business);
}
return response(
array(
"r" => true,
"type" => "success",
"title" => "",
"m" => $request['id'] ? __('messages.business_updated_successfully') : __('messages.business_created_successfully'),
"data" => null
)
);
return $request;
}
private function uploadImage($image, $business)
{
$filename = $this->generatepin() . '.jpg';
if ($business->image) {
Storage::disk('s3')->delete(config('s3.business') . $business->image);
}
$business->image = $filename;
$business->update();
list($baseType, $image) = explode(';', $image);
list(, $image) = explode(',', $image);
$image = base64_decode($image);
// Subir archivo a AWS S3
Storage::disk('s3')->put(config('s3.business') . $filename, $image, 'public');
return array('status' => true, 'filename' => $filename);
}
// Genera Pin aleatorio
public function generatepin()
{
$date = Carbon::now();
$pin = $date->getTimestamp() . rand(10, 99);
return $pin;
}
public function getBusinesses(Request $request)
{
$query = Businesses::with('address', 'address.city', 'address.city.state', 'address.city.state.country')->with('rating')->orderBy('score', 'DESC')->where('businesses.active', 1);
if ($request["offset"]) {
$query->offset(intval($request["offset"]));
}
if ($request["take"]) {
$query->take(intval($request["take"]));
}
if ($request['id']) {
$query->where('businesses.id', $request['id']);
}
if ($request['user']) {
$query->where('businesses.user_id', $request['user']);
}
if ($request['category']) {
$query->where('businesses.category_id', $request['category']);
$query->where('businesses.approved', 1);
}
if ($request['search']) {
$query->where('businesses.name', 'like', '%' . $request["search"] . '%');
$query->leftJoin('addresses', 'addresses.id', '=', 'businesses.address_id')
->orWhere('addresses.district', 'like', '%' . $request["search"] . '%');
}
$data = $query->orderBy('businesses.image', 'DESC')->get();
foreach ($data as $item) {
$item->ratingScore = $item->getAverageRatingAttribute();
}
return $data;
}
public function delete(Request $request)
{
Businesses::where('id', $request->businessId)->forceDelete();
return response(
array(
"r" => true,
"type" => "success",
"title" => "",
"m" => __('messages.business_deleted_successfully'),
"data" => null
)
);
}
}