/** * POST /api/itemRequests * @param StoreItemRequest $request * @return Response */ public function store(StoreItemRequest $request) { $currentUser = Auth::user(); if ($currentUser && $this->itemsRepository->itemAlreadyExists($request)) { //Checking $currentUser is true because if it's feedback sent from one of my apps, //the itemAlreadyExists method will throw an exception because the user isn't logged in return response(['error' => "You already have this item here.", 'status' => Response::HTTP_BAD_REQUEST], Response::HTTP_BAD_REQUEST); } else { $item = new Item($request->only(['title', 'body', 'priority', 'urgency', 'favourite', 'alarm', 'not_before', 'recurring_unit', 'recurring_frequency'])); if ($request->get('recurring_unit') === 'none') { $item->recurring_unit = null; } //This is because the alarm was getting set to 0000-00-00 00:00:00 when no alarm was specified if ($request->has('alarm') && !$request->get('alarm')) { $item->alarm = null; } $parent = false; if ($request->get('parent_id')) { $parent = Item::find($request->get('parent_id')); $item->parent()->associate($parent); } if ($currentUser) { $item->user()->associate(Auth::user()); } else { //User is not logged in. It could be a feedback request from one of my apps. Add the item to my items (user_id 1). $item->user()->associate(1); } $item->category()->associate(Category::find($request->get('category_id'))); $item->index = $item->calculateIndex($request->get('index'), $parent); $item->save(); $item = $this->transform($this->createItem($item, new ItemTransformer()))['data']; return response($item, Response::HTTP_CREATED); } }