File: /mnt/data/ghayatcom/ghayatcom-api/app/Http/Controllers/Api/CouponController.php
<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Coupon;
use Auth;
use Exception;
use Throwable;
use Illuminate\Database\QueryException;
use App\Library\CouponLibrary;
use App\Http\Requests\CouponStoreRequest;
use App\Http\Requests\CouponUpdateRequest;
use App\Http\Requests\CouponDeleteRequest;
class CouponController extends Controller
{
public function index(Request $request) {
try {
$paginate = $request->count_per_page ? $request->count_per_page : 10;
$pageNumber = $request->page ? $request->page : 1;
$search_key = $request->search ? $request->search : '';
$status = $request->status ? $request->status : '1';
$area_specialisation = $request->area_specialisation ? $request->area_specialisation : '';
$date = $request->date ? $request->date : '';
$sort_by_col = (isset($request->sort_by)) ? $request->sort_by : 'id';
$data_order_by = $request->order_by;
/** @var string $data_order_by */
$orderBy = $data_order_by ? strtoupper($data_order_by) : strtoupper('asc');
$list = Coupon::with('areaSpecialisation');
if(!empty($search_key)) {
$list = $list->where(function($q) use($search_key) {
$q->where('code', 'LIKE', "%{$search_key}%");
$q->orWhere('name', 'LIKE', "%{$search_key}%");
$q->orWhere('description', 'LIKE', "%{$search_key}%");
$q->orWhereHas('areaSpecialisation', function($r) use($search_key) {
$r->where('area_specialisation_name', 'LIKE', "%{$search_key}%");
});
});
}
if(!empty($status)) {
$list = $list->where(function($q) use($status) {
$status = explode(',',$status);
$q->whereIn('status', $status);
});
}
if(!empty($area_specialisation)) {
$list = $list->where(function($q) use($area_specialisation) {
$area_specialisation = explode(',',$area_specialisation);
$q->whereIn('area_specialisation_id', $area_specialisation);
});
}
if(!empty($date)) {
$list = $list->where(function($q) use($date) {
$date = Carbon::parse($date)->format('Y-m-d');
$q->whereDate('valid_from', '>=', $date);
});
}
if($sort_by_col) {
/**0
* @var string $sort_by_col
* @var string $orderBy
*/
$list = $list->orderBy($sort_by_col, $orderBy);
}
return self::sentResponse(200, $list->paginate($paginate), __('digimed_validation.success_response.data_fetch_success'));
} catch(Exception | Throwable | QueryException $e) {
return self::sentResponse(500, [], $e->getMessage());
}
}
public function store(CouponStoreRequest $request, CouponLibrary $couponLibrary) {
try {
/** @var \App\User $user */
$user = Auth::user();
$auth_id = auth()->user()->id;
$coupon_code = !empty($request->code) ? $request->code : '';
$code = $couponLibrary->generateRandomCodes($coupon_code,8,'insert','');
if($code == 'coupon_code_exceed') {
return self::sentResponse(409, [], __('digimed_validation.error_response.coupon_code_exceed'));
}
$coupon = Coupon::firstOrNew(['code' => $code]);
$coupon->area_specialisation_id = $request->area_specialisation_id;
$coupon->value = $request->value;
$coupon->type = $request->type;
$coupon->name = $request->name;
$coupon->description = $request->description;
$coupon->valid_from = $request->valid_from;
$coupon->valid_to = $request->valid_to;
$coupon->status = '1';
$coupon->created_by = $auth_id;
$coupon->save();
return self::sentResponse(200, [], __('digimed_validation.success_response.data_store_success'));
} catch(Exception | Throwable | QueryException $e) {
return self::sentResponse(500, [], $e->getMessage());
}
}
public function update(CouponUpdateRequest $request, CouponLibrary $couponLibrary) {
try {
/** @var \App\User $user */
$user = Auth::user();
$auth_id = auth()->user()->id;
$coupon_code = !empty($request->code) ? $request->code : '';
$id = $request->id;
$code = $couponLibrary->generateRandomCodes($coupon_code,8,'update',$id);
if($code == 'coupon_code_exceed') {
return self::sentResponse(409, [], __('digimed_validation.error_response.coupon_code_exceed'));
}
$coupon = Coupon::find($id);
$coupon->area_specialisation_id = $request->area_specialisation_id;
$coupon->code = $code;
$coupon->value = $request->value;
$coupon->type = $request->type;
$coupon->name = $request->name;
$coupon->description = $request->description;
$coupon->valid_from = $request->valid_from;
$coupon->valid_to = $request->valid_to;
$coupon->status = '1';
$coupon->updated_by = $auth_id;
$coupon->save();
return self::sentResponse(200, [], __('digimed_validation.success_response.data_update_success'));
} catch(Exception | Throwable | QueryException $e) {
return self::sentResponse(500, [], $e->getMessage());
}
}
public function destroy(CouponDeleteRequest $request) {
try {
/** @var \App\User $user */
$user = Auth::user();
$auth_id = auth()->user()->id;
$coupon = Coupon::find($request->id);
$coupon->deleted_by = $auth_id;
$coupon->save();
$coupon->delete();
return self::sentResponse(200, [], __('digimed_validation.success_response.data_delete_success'));
} catch(Exception | Throwable | QueryException $e) {
return self::sentResponse(500, [], $e->getMessage());
}
}
}