/** * @param Exercise $exercise * @return array */ public function transform(Exercise $exercise) { $array = ['id' => $exercise->id, 'name' => $exercise->name, 'description' => $exercise->description, 'stepNumber' => $exercise->step_number, 'defaultQuantity' => $exercise->default_quantity, 'tag_ids' => $exercise->tags()->lists('id'), 'target' => $exercise->target, 'priority' => $exercise->priority, 'program' => $exercise->program, 'lastDone' => $exercise->lastDone, 'stretch' => $exercise->stretch, 'frequency' => $exercise->frequency, 'dueIn' => $exercise->dueIn]; if ($exercise->series) { $array['series'] = ['id' => $exercise->series->id, 'name' => $exercise->series->name]; } return $array; }
/** * Insert an exercise entry. * It can be an exercise set. * @param Request $request * @return \Illuminate\Http\Response */ public function store(Request $request) { $exercise = Exercise::find($request->get('exercise_id')); if ($request->get('exerciseSet')) { // We are inserting an exercise set $quantity = $exercise->default_quantity; $unit = Unit::find($exercise->default_unit_id); } else { $quantity = $request->get('quantity'); $unit = Unit::find($request->get('unit_id')); } $entry = new Entry(['date' => $request->get('date'), 'quantity' => $quantity]); $entry->user()->associate(Auth::user()); $entry->exercise()->associate($exercise); $entry->unit()->associate($unit); $entry->save(); //Return the entries for the day $entries = transform(createCollection($this->exerciseEntriesRepository->getEntriesForTheDay($request->get('date')), new ExerciseEntryTransformer()))['data']; return response($entries, Response::HTTP_CREATED); }
/** * * @param $exercises * @param Unit $unit * @param Series $series */ private function insertExercisesInSeries($exercises, Unit $unit, Series $series) { $index = 0; // $series_ids = Series::where('user_id', $this->user->id)->lists('id')->all(); foreach ($exercises as $exercise) { $index++; $stretch = isset($exercise['stretch']) ? 1 : 0; $temp = new Exercise(['name' => $exercise['name'], 'description' => $exercise['description'], 'default_quantity' => $exercise['defaultQuantity'], 'step_number' => $index, 'target' => '3 * 10', 'priority' => $exercise['priority'], 'stretch' => $stretch]); if (isset($exercise['frequency'])) { $temp['frequency'] = $exercise['frequency']; } $temp->user()->associate($this->user); $temp->defaultUnit()->associate($unit); $temp->program()->associate(ExerciseProgram::first()); $temp->series()->associate($series); $temp->save(); } }
/** * Get all exercises for the current user, * along with their tags, default unit name * and the name of the series each exercise belongs to. * Order first by series name, then by step number. * @return mixed */ public function getExercises() { $exercises = Exercise::forCurrentUser('exercises')->with('defaultUnit')->orderBy('step_number')->with('series')->with('tags')->get(); return transform(createCollection($exercises, new ExerciseTransformer()))['data']; }
/** * @test * @return void */ public function it_can_delete_an_exercise() { $this->logInUser(); $exercise = new Exercise(['name' => 'echidna']); $exercise->user()->associate($this->user); $exercise->save(); $this->seeInDatabase('exercises', ['name' => 'echidna']); $response = $this->call('DELETE', '/api/exercises/' . $exercise->id); $this->assertEquals(204, $response->getStatusCode()); $this->missingFromDatabase('exercises', ['name' => 'echidna']); $response = $this->call('DELETE', '/api/units/0'); $this->assertEquals(404, $response->getStatusCode()); }
/** * @test * @return void */ public function it_can_delete_an_exercise_entry() { $this->logInUser(); $date = Carbon::today()->format('Y-m-d'); $entry = new Entry(['date' => $date, 'quantity' => 501]); $entry->user()->associate($this->user); $entry->exercise()->associate(Exercise::find(1)); $entry->unit()->associate(Unit::find(1)); $entry->save(); $this->seeInDatabase('exercise_entries', ['date' => $date, 'exercise_id' => 1, 'quantity' => 501, 'exercise_unit_id' => 1]); $response = $this->call('DELETE', '/api/exerciseEntries/' . $entry->id); $this->assertEquals(204, $response->getStatusCode()); $this->missingFromDatabase('exercise_entries', ['date' => $date, 'exercise_id' => 1, 'quantity' => 501, 'exercise_unit_id' => 1]); $response = $this->call('DELETE', '/api/exerciseEntries/' . $entry->id); $this->assertEquals(404, $response->getStatusCode()); }
/** * Create the entries for the same exercise but with different units * for today, so that I can test out the getSpecificExerciseEntries * for a day where the exercise is entered with different units */ private function createEntriesForToday() { $exercise = Exercise::where('user_id', $this->user->id)->first(); $date = Carbon::today(); $this->createEntry(5, $exercise, Unit::find($this->unit_ids[0]), $date); $this->createEntry(5, $exercise, Unit::find($this->unit_ids[0]), $date); $this->createEntry(10, $exercise, Unit::find($this->unit_ids[1]), $date); }
/** * * @param Exercise $exercise * @return mixed * @throws \Exception */ public function destroy(Exercise $exercise = null) { // if(is_null($exercise)) { // return response([ // 'error' => 'Exercise not found.', // 'status' => Response::HTTP_NOT_FOUND // = 404 // ], Response::HTTP_NOT_FOUND); // } $exercise->delete(); return $this->responseNoContent(); }
/** * Define your route model bindings, pattern filters, etc. * * @param \Illuminate\Routing\Router $router * @return void */ public function boot(Router $router) { parent::boot($router); Route::bind('exercises', function ($id) { return Exercise::forCurrentUser()->findOrFail($id); }); Route::bind('exerciseEntries', function ($id) { return ExerciseEntry::forCurrentUser()->findOrFail($id); }); Route::bind('menuEntries', function ($id) { return MenuEntry::forCurrentUser()->findOrFail($id); }); Route::bind('exerciseSeries', function ($id) { return ExerciseSeries::forCurrentUser()->findOrFail($id); }); Route::bind('foods', function ($id) { return Food::forCurrentUser()->findOrFail($id); }); Route::bind('recipes', function ($id) { return Recipe::forCurrentUser()->findOrFail($id); }); Route::bind('exerciseTags', function ($id) { return Tag::forCurrentUser()->where('for', 'exercise')->findOrFail($id); }); Route::bind('recipeTags', function ($id) { return Tag::forCurrentUser()->where('for', 'recipe')->findOrFail($id); }); Route::bind('foodUnits', function ($id) { return Unit::forCurrentUser()->where('for', 'food')->findOrFail($id); }); Route::bind('exerciseUnits', function ($id) { return Unit::forCurrentUser()->where('for', 'exercise')->findOrFail($id); }); Route::bind('timers', function ($id) { return Timer::forCurrentUser()->findOrFail($id); }); Route::bind('activities', function ($id) { return Activity::forCurrentUser()->findOrFail($id); }); Route::bind('weights', function ($idOrDate) { if (strrpos($idOrDate, '-')) { //parameter is the date of the entry $weight = Weight::forCurrentUser()->where('date', $idOrDate)->first(); } else { //parameter is the id of the entry $weight = Weight::forCurrentUser()->findOrFail($idOrDate); } return $weight; }); /** * $parameter is either the id or the date */ Route::bind('journal', function ($parameter) { /** * @VP: * Is there a better way to check if the $parameter is an * id or a date? When I tried using Carbon to create an object from * the parameter, it threw an exception when the $parameter was the id, * whereas I just wanted a boolean. */ if (strrpos($parameter, '-')) { //$parameter is the date of the entry $journal = Journal::forCurrentUser()->where('date', $parameter)->first(); } else { //$parameter is the id of the entry $journal = Journal::forCurrentUser()->findOrFail($parameter); } return $journal; }); }