%PDF- %PDF-
Direktori : /home/forge/api-takeaseat.eco-n-tech.co.uk/app/Http/Controllers/Account/ |
Current File : //home/forge/api-takeaseat.eco-n-tech.co.uk/app/Http/Controllers/Account/AvailabilityController.php |
<?php namespace App\Http\Controllers\Account; use Carbon\Carbon; use App\Models\Session; use App\Models\Availability; use Illuminate\Http\Request; use App\Http\Requests\StoreAvailability; use App\Repositories\AvailabilityRepository; use App\Http\Resources\Account\AvailabilityResource; use App\Http\Resources\SessionResource; use App\Http\Resources\Account\UserAddressResource; use App\Http\Controllers\Controller; class AvailabilityController extends Controller { /** * Get the therapists availability in the specific calendar format * * @param Request $request * @return \Illuminate\Http\Response $availability */ public function index(Request $request) { $user = auth()->user(); $therapist = $user->therapist; $availability = $therapist->availability; $slot_increments = Availability::INCREMENTS; return response()->json([ 'availability' => AvailabilityResource::collection($availability), 'slot_increments' => $slot_increments, 'session_types' => SessionResource::collection($therapist->sessions), 'addresses' => UserAddressResource::collection($user->addresses) ]); } /** * Create availability for the therapist * * @param StoreAvailability $request * @return AvailabilityResource $availability */ public function create(StoreAvailability $request) { $therapist = auth()->user()->therapist; $availableFrom = $request->get('date') .' '. $request->get('available_from'); $availableTo = $request->get('date') .' '. $request->get('available_to'); $existingAvailability = Availability::where(function($query) use($availableFrom, $therapist) { $query->where('available_from', '<=', $availableFrom) ->where('available_to', '>=', $availableFrom) ->where('therapist_id', $therapist->id); })->where(function($query) use($availableTo, $therapist) { $query->where('available_from', '<=', $availableTo) ->where('available_to', '>=', $availableTo) ->where('therapist_id', $therapist->id); })->orWhere(function($query) use($availableFrom, $availableTo, $therapist) { $query->where('available_from', '>=', $availableFrom) ->where('available_to', '<=', $availableTo) ->where('therapist_id', $therapist->id); })->first(); if($existingAvailability !== null) { return response()->json(__('This availability already exists.'), 422); } $availability = Availability::create([ 'therapist_id' => $therapist->id, 'available_from' => Carbon::parse($availableFrom), 'available_to' => Carbon::parse($availableTo), 'increment_id' => 1, 'address_id' => $request->get('address_id') ]); $availability->sessions()->sync($request->get('session_types')); return new AvailabilityResource($availability); } /** * Create availability for the therapist * * @param Request $request * @return AvailabilityResource $availability */ public function delete($id, Request $request) { $therapist = auth()->user()->therapist; $availability = Availability::findOrFail($id); $availability->sessions()->detach(); $availability->delete(); return AvailabilityResource::collection($therapist->availability); } }