Added ExerciseController

This commit is contained in:
Andrew Lalis 2023-01-24 22:43:40 +01:00
parent 93d212f7e5
commit 50a6ece0d8
4 changed files with 59 additions and 4 deletions

View File

@ -1,3 +1,6 @@
us,United States us,United States
nl,Netherlands nl,Netherlands
de,Germany de,Germany
uk,United Kingdom
dk,Denmark
mx,Mexico
1 us United States
2 nl Netherlands
3 de Germany
4 uk United Kingdom
5 dk Denmark
6 mx Mexico

View File

@ -0,0 +1,22 @@
package nl.andrewlalis.gymboard_api.controller;
import nl.andrewlalis.gymboard_api.controller.dto.ExerciseResponse;
import nl.andrewlalis.gymboard_api.service.ExerciseService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
public class ExerciseController {
private final ExerciseService exerciseService;
public ExerciseController(ExerciseService exerciseService) {
this.exerciseService = exerciseService;
}
@GetMapping(path = "/exercises")
public List<ExerciseResponse> getExercises() {
return exerciseService.getExercises();
}
}

View File

@ -0,0 +1,24 @@
package nl.andrewlalis.gymboard_api.service;
import nl.andrewlalis.gymboard_api.controller.dto.ExerciseResponse;
import nl.andrewlalis.gymboard_api.dao.exercise.ExerciseRepository;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@Service
public class ExerciseService {
private final ExerciseRepository exerciseRepository;
public ExerciseService(ExerciseRepository exerciseRepository) {
this.exerciseRepository = exerciseRepository;
}
@Transactional(readOnly = true)
public List<ExerciseResponse> getExercises() {
return exerciseRepository.findAll(Sort.by("shortName"))
.stream().map(ExerciseResponse::new).toList();
}
}

View File

@ -4,7 +4,7 @@
<SlimForm> <SlimForm>
<div class="row"> <div class="row">
<q-select <q-select
:options="exercises" :options="exercisesF"
v-model="submissionModel.exercise" v-model="submissionModel.exercise"
:label="$t('gymPage.submitPage.exercise')" :label="$t('gymPage.submitPage.exercise')"
class="col-12" class="col-12"
@ -54,7 +54,7 @@
<script setup lang="ts"> <script setup lang="ts">
import {onMounted, ref, Ref} from 'vue'; import {onMounted, ref, Ref} from 'vue';
import {Gym} from 'src/api/gymboard-api'; import {Exercise, getExercises, Gym} from 'src/api/gymboard-api';
import {getGymFromRoute} from 'src/router/gym-routing'; import {getGymFromRoute} from 'src/router/gym-routing';
import SlimForm from 'components/SlimForm.vue'; import SlimForm from 'components/SlimForm.vue';
@ -64,6 +64,7 @@ import SlimForm from 'components/SlimForm.vue';
// const props = defineProps<Props>(); // const props = defineProps<Props>();
const gym: Ref<Gym | undefined> = ref<Gym>(); const gym: Ref<Gym | undefined> = ref<Gym>();
const exercises: Ref<Array<Exercise> | undefined> = ref<Array<Exercise>>();
let submissionModel = ref({ let submissionModel = ref({
exercise: null, exercise: null,
weight: null, weight: null,
@ -72,7 +73,7 @@ let submissionModel = ref({
date: new Date().toLocaleDateString('en-CA') date: new Date().toLocaleDateString('en-CA')
}); });
const weightUnits = ['Kg', 'Lbs']; const weightUnits = ['Kg', 'Lbs'];
const exercises = ['Bench Press', 'Squat', 'Deadlift']; const exercisesF = ['Bench Press', 'Squat', 'Deadlift'];
// TODO: Make it possible to pass the gym to this via props instead. // TODO: Make it possible to pass the gym to this via props instead.
onMounted(async () => { onMounted(async () => {
@ -81,6 +82,11 @@ onMounted(async () => {
} catch (error) { } catch (error) {
console.error(error); console.error(error);
} }
try {
exercises.value = await getExercises();
} catch (error) {
console.error(error);
}
}); });
function onSubmitted() { function onSubmitted() {