json(EventResource::collection($events)); } /** * Store a newly created resource in storage. * * @param EventRequest $request * @return JsonResponse */ public function store(EventRequest $request): JsonResponse { $validated = $request->validated(); $event = $request->user()->events()->create($validated); $event->save(); return response()->json(new EventResource($event), 201); } /** * Display the specified resource. * * @param Event $event * @return JsonResponse */ public function show(Event $event): JsonResponse { return response()->json(new EventResource($event)); } /** * Update the specified resource in storage. * * @param EventRequest $request * @param Event $event * @return JsonResponse * @throws AuthorizationException */ public function update(EventRequest $request, Event $event): JsonResponse { $this->authorize('update', $event); $event->update($request->all()); return response()->json(new EventResource($event)); } /** * Remove the specified resource from storage. * * @param Event $event * @return JsonResponse */ public function destroy(Event $event): JsonResponse { $this->authorize('delete', $event); $event->delete(); return response()->json([], 204); } public function inviteUser(Event $event, User $user): JsonResponse { $this->authorize('update', $event); $event->guests()->attach($user); return response()->json(new EventResource($event)); } public function removeInviteUser(Event $event, User $user) { $this->authorize('delete', $event); $event->guests()->detach($user); return (new EventResource($event)) ->response() ->setStatusCode(204); } public function addGuestToStaffEvent(Event $event, User $user): JsonResponse { $this->authorize('delete', $event); $event->guests()->updateExistingPivot($user, ['is_staff' => true], false); return response()->json(new EventResource($event)); } public function deleteGuestToStaffEvent(Event $event, User $user): JsonResponse { $this->authorize('delete', $event); $event->guests()->updateExistingPivot($user, ['is_staff' => false], false); return response()->json(new EventResource($event)); } public function userConfirmParticipation(Event $event) { $this->authorize('participation', $event); $event->guests()->updateExistingPivot(auth()->user(), ['validated_at' => now()->toDateTimeString()], false); return (new EventResource($event)) ->response() ->setStatusCode(200); } public function userDeleteInvitation(Event $event) { $this->authorize('participation', $event); $event->guests()->detach(auth()->user()); return response([], 204); } public function addGuestWithEmail(Request $request, Event $event) { $data = $request->validate([ 'email' => 'required|email', ]); $event->emailedGuests()->save(new EventGuestsNonUsers(['email' => $data['email']])); return response()->json(new EventResource($event), 201); } public function guestCanReadEvent(Request $request, Event $event) { $guest = $request->guest; if (!$guest->read_at) { $guest->update(['read_at' => now()->toDateTimeString()]); } return response()->json(new EventResource($event)); } public function guestCanConfirmEvent(Request $request, Event $event) { $guest = $request->guest; $guest->update(['validated_at' => now()->toDateTimeString()]); return response()->json(new EventResource($event)); } }