Server : Apache System : Linux 145.162.205.92.host.secureserver.net 5.14.0-611.45.1.el9_7.x86_64 #1 SMP PREEMPT_DYNAMIC Wed Apr 1 05:56:53 EDT 2026 x86_64 User : tradze ( 1001) PHP Version : 8.1.34 Disable Function : NONE Directory : /home/tradze/www/app/Modules/Users/Http/Controllers/Api/ |
<?php
namespace App\Modules\Users\Http\Controllers\Api;
use App\Http\Controllers\ApiController;
use App\Modules\Accounts\Models\Setting;
use App\Modules\Faq\Models\Faq;
use App\Modules\Pages\Models\Page;
use App\Modules\Schedules\Models\BookingOrder;
use App\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Session;
use App\Modules\Testimonials\Models\SalonReviews;
use Illuminate\Support\Facades\Validator;
use Carbon\Carbon;
use App\Modules\Pages\Http\Requests\ContactFormRequest;
use App\Modules\Pages\Models\ContactForm;
use Illuminate\Support\Facades\Mail;
class ApiClientGeneral extends ApiController
{
/**
* Get default radius
*/
public function getDefaultRadius()
{
$radius = Setting::where('key', 'default_radius')->select('value')->first(); // Default to 10 if not set
$radius = $radius ? $radius->value : 10;
return response([
'success' => true,
'message' => null,
'data' => ['radius' => $radius],
], 200);
}
/**
* Get FAQ
*/
public function get_faq()
{
$results = Faq::all();
$items = [];
foreach ($results as $res)
$items[] = [
'id' => $res->id,
'name' => $res->name,
'body' => html_entity_decode(strip_tags(preg_replace('#<a.*?>(.*?)</a>#i', '\1', $this->formatText($res->body)))),
];
//return booking data
return response([
'success' => true,
'message' => null,
'items_no' => count($items),
'items' => $items,
], 200);
}
/**
* Get Legals
*/
public function get_legals()
{
$object = Page::where('slug', 'legal')->first();
$data = [
'title' => $object->title,
'shortText' => $this->formatText($object->subtitle),
'body' => $object->body,
'url' => url('legal'),
];
//return booking data
return response([
'success' => true,
'message' => null,
'data' => $data,
], 200);
}
/**
* Get Legals
*/
public function get_customer_service()
{
$object = Page::where('slug', 'contact')->first();
$data = [
'title' => $object->title,
'shortText' => $object->subtitle,
'body' => $object->body,
'url' => url('contact'),
// 'phone'=>env('API_CONTACT_PHONE'),
'email' => env('API_CONTACT_EMAIL'),
];
//return booking data
return response([
'success' => true,
'message' => null,
'data' => $data,
], 200);
}
/**
* Get Legals
*/
public function get_corporate()
{
$object = Page::where('slug', 'commercial')->first();
$data = [
'title' => $object->title,
'shortText' => $object->subtitle,
'body' => str_limit(strip_tags($object->body), 455, ''),
'image' => $object->ImageFeatureUrl,
'url' => url('commercial'),
];
//return booking data
return response([
'success' => true,
'message' => null,
'data' => $data,
], 200);
}
/**
* Get therapist contract
*/
public function get_therapist_contract()
{
$data = [
'file_link' => url('documents/Tradze-service-provider-agreement.pdf'),
];
//return booking data
return response([
'success' => true,
'message' => null,
'data' => $data,
], 200);
}
// public function postReviewAndRating(Request $request)
// {
// $validator = Validator::make($request->all(), [
// 'therapist_id' => 'required|numeric|min:1',
// 'booking_id' => 'required',
// 'salon_rating' => 'required|integer|min:1|max:5',
// 'atmosphere' => 'required|integer|min:1|max:5', // Fixed rule
// 'sanitation' => 'required|integer|min:1|max:5',
// 'employees' => 'required|integer|min:1|max:5',
// 'satisfaction' => 'required|integer|min:1|max:5',
// ]);
// if ($validator->fails()) {
// $errFields = [];
// foreach ($request->except('api_token') as $field => $value) {
// if ($validator->errors()->first($field))
// $errFields[$field] = $validator->errors()->first($field);
// } //endforeach
// return response([
// 'success' => false,
// 'message' => 'All the fields are required!',
// 'data' => [],
// 'errors' => $errFields,
// ], 422);
// } //endif validator fails
// $user = $this->user;
// $data = [
// 'user_id' => $user->id,
// 'salon_id' => $request->salon_id ?? null,
// 'therapist_id' => $request->therapist_id,
// 'booking_id' => $request->booking_id,
// 'salon_rating' => $request->salon_rating,
// 'atmosphere' => $request->atmosphere,
// 'sanitation' => $request->sanitation,
// 'employees' => $request->employees,
// 'satisfaction' => $request->satisfaction,
// 'review' => $request->review,
// ];
// SalonReviews::create($data);
// $booking = BookingOrder::where('user_id', $user->id)
// ->where('id', $request->booking_id)
// ->first(); // Get the first matching record
// if ($booking) {
// $booking->update(['is_modal_triggered' => 1]);
// }
// //return booking data
// return response([
// 'success' => true,
// 'message' => 'Review added successfully',
// ], 200);
// }
public function postReviewAndRating(Request $request)
{
$validator = Validator::make($request->all(), [
'therapist_id' => 'required|numeric|min:1',
'booking_id' => 'required',
'salon_rating' => 'required|integer|min:1|max:5',
'atmosphere' => 'required|integer|min:1|max:5',
'sanitation' => 'required|integer|min:1|max:5',
'employees' => 'required|integer|min:1|max:5',
'satisfaction' => 'required|integer|min:1|max:5',
]);
if ($validator->fails()) {
$errFields = [];
foreach ($request->except('api_token') as $field => $value) {
if ($validator->errors()->first($field))
$errFields[$field] = $validator->errors()->first($field);
}
return response([
'success' => false,
'message' => 'All the fields are required!',
'data' => [],
'errors' => $errFields,
], 422);
}
$user = $this->user;
// Check if a review already exists for this booking
$existingReview = SalonReviews::where('booking_id', $request->booking_id)->first();
if ($existingReview) {
return response([
'success' => false,
'message' => 'Review already completed for this booking',
], 409); // 409 Conflict
}
// Create review
$data = [
'user_id' => $user->id,
'user_name' => $user->name,
'salon_id' => $request->salon_id ?? null,
'therapist_id' => $request->therapist_id,
'booking_id' => $request->booking_id,
'salon_rating' => $request->salon_rating,
'atmosphere' => $request->atmosphere,
'sanitation' => $request->sanitation,
'employees' => $request->employees,
'satisfaction' => $request->satisfaction,
'review' => $request->review,
];
SalonReviews::create($data);
// Update booking
$booking = BookingOrder::where('user_id', $user->id)
->where('id', $request->booking_id)
->first();
if ($booking) {
$booking->update(['is_modal_triggered' => 1]);
}
return response([
'success' => true,
'message' => 'Review added successfully',
], 200);
}
public function reviewModal(Request $request)
{
try {
$user = $this->user;
$lastestBooking = BookingOrder::where('user_id', $user->id)
->latest('id') // shorthand for orderBy('id', 'desc')
->first();
if (!$lastestBooking) {
return response([
'success' => false,
'message' => 'No booking found',
], 200);
}
$is_modal_triggered = $lastestBooking->is_modal_triggered;
$booking_id = $lastestBooking->id;
$reviews = SalonReviews::where('booking_id', $booking_id)->first();
if (!$reviews && $is_modal_triggered == 0) {
return response([
'success' => true,
'message' => 'Leave your feedback',
'data' => [
'booking_id' => $lastestBooking->id,
'booking_info' => json_decode($lastestBooking->orderInfo)
],
], 200);
}
return response([
'success' => false,
'message' => 'No booking found',
], 200);
} catch (\Throwable $th) {
return response([
'success' => false,
'message' => $th->getMessage(),
], 200);
}
}
public function handelSkipCancel(Request $request)
{
try {
$validator = Validator::make($request->all(), [
'booking_id' => 'required',
]);
if ($validator->fails()) {
return response($validator->getMessageBag());
}
$user = $this->user;
$booking = BookingOrder::where('id', $request->booking_id)
->where('user_id', $user->id)
->first(); // Get the first matching record
if ($booking) {
$booking->update(['is_modal_triggered' => 1]);
}
return response([
'success' => true,
'message' => 'Declined!',
], 200);
} catch (\Throwable $th) {
return response([
'success' => false,
'message' => $th->getMessage(),
], 500);
}
}
/**
* Contact form
*
* @return Response
*/
public function contactUs(Request $request)
{
$validator = Validator::make($request->all(), [
'name' => 'required',
'phone' => 'required',
'email' => 'required',
'body' => 'required',
]);
if ($validator->fails()) {
return response()->json(['success' => false, 'message' => $validator->errors()->first()], 400);
}
//create data array
$data = [
'name' => $request->name,
'phone' => $request->phone,
'email' => $request->email,
'body' => $request->body,
];
//save new contact form
$obj = ContactForm::create($data);
$responseData = ['success' => true, 'message' => 'Thank you! We will contact you as soon as possible.'];
//send email
Mail::send('pages::frontend.emails.contactform', ['data' => $data], function ($m) use ($data) {
$m->from(env('MAIL_FROM'), env('APP_NAME'));
$m->to(env('MAIL_ADMIN_ADDR'), env('MAIL_ADMIN_NAME'));
$m->bcc(explode(',', env('MAIL_NEWORDER_BCC')), env('MAIL_NEWORDER_BCC_NAME'));
$m->subject(env('APP_NAME') . ' – Contact form');
});
//redirect
return response(json_encode($responseData), 200);
}
}