%PDF- %PDF-
Direktori : /var/www/html/diaspora/api_internal/app/Http/Controllers/Api/v1/ |
Current File : /var/www/html/diaspora/api_internal/app/Http/Controllers/Api/v1/EventsController.php |
<?php namespace App\Http\Controllers\Api\v1; use App\Http\Controllers\Api\ApiController; use App\Http\Requests\Api\v1\Events\CreateEventRequest; use App\Models\Event; use App\Transformers\EventTransformer; use Illuminate\Http\Request; use Illuminate\Pagination\LengthAwarePaginator; use Illuminate\Support\Facades\DB; class EventsController extends ApiController { /** * User $user. */ protected $user; /** * PostsController constructor. */ public function __construct() { $this->user = auth() ->guard('api') ->user(); } /** * @param Request $request * @return EventsController */ public function index(Request $request) { /** @var LengthAwarePaginator $result */ $result = $this->filterEvents($request) ->paginate($request->get('perPage')); return $this->withPaginated($result, new EventTransformer()); } private function filterEvents(Request $request) { $result = Event::query(); if ($title = $request->get('title')) { $result = $result->whereHas('translations', function ($q) use ($title) { $q->where('title', 'like', "$title%"); $q->where('locale', app()->getLocale()); }); } return $result; } /** * @param $id * @return EventsController */ public function show($id) { $event = Event::query() ->findOrFail($id); return $this->item($event, new EventTransformer()); } /** * @param CreateEventRequest $request * @return \Illuminate\Http\JsonResponse * @throws \Spatie\MediaLibrary\Exceptions\FileCannotBeAdded * @throws \Spatie\MediaLibrary\Exceptions\FileCannotBeAdded\InvalidBase64Data */ public function store(CreateEventRequest $request) { /** @var Event $event */ $event = Event::query() ->make($request->only([ 'for', 'title', 'location', 'description', 'when', 'video_type', 'video_url', ])); $event->uploadImage($request->get('featured_image')); $event->save(); activity() ->causedBy($this->user) ->performedOn($event) ->log('created'); // $this->dispatch(new SubscribeAllDevicesToEventJob($event)); return $this->item($event, new EventTransformer()); } public function update(CreateEventRequest $request, $id) { $event = Event::query() ->findOrFail($id); $event->update($request->only([ 'for', 'title', 'location', 'description', 'when', 'video_type', 'video_url', ])); activity() ->causedBy($this->user) ->performedOn($event) ->log('updated'); return $this->item($event, new EventTransformer()); } public function archive(Event $event) { $event->archive(); activity() ->causedBy($this->user) ->performedOn($event) ->log('archived'); return $this->item($event, new EventTransformer()); } public function publish(Event $event) { $event->publish(); activity() ->causedBy($this->user) ->performedOn($event) ->log('published'); return $this->item($event, new EventTransformer()); } public function unArchive(Event $event) { $event->unArchive(); activity() ->causedBy($this->user) ->performedOn($event) ->log('unArchived'); return $this->item($event, new EventTransformer()); } public function getAvailableEvents() { return $this->collection(Event::query() ->get(), new EventTransformer()); } public function getModules() { return response()->json([ ['code' => Event::KKD_EVENT, 'description' => trans("eventsFor." . Event::KKD_EVENT)], ['code' => Event::MY_COUNTRY_EVENT, 'description' => trans("eventsFor." . Event::MY_COUNTRY_EVENT)], ]); } public function getVideoTypes() { return response()->json([ ['code' => Event::VIDEO_YOUTUBE, 'description' => trans("videoTypes." . Event::VIDEO_YOUTUBE)], ]); } public function uploadFeaturedImage(Request $request, Event $event) { DB::beginTransaction(); try { $event->uploadImage($request->get('featured_image')); activity() ->causedBy($this->user) ->performedOn($event) ->log('updated-featured-image'); DB::commit(); return $this->item($event->fresh(), new EventTransformer()); } catch (\Exception $e) { DB::rollBack(); return $this->wrongArguments([ 'message' => $e->getMessage(), ]); } } }