|
|
@@ -11,6 +11,7 @@ use crate::models::workout::Workout;
|
|
|
pub struct CreateExerciseInput {
|
|
|
pub name: String,
|
|
|
pub exercise_type: ExerciseType,
|
|
|
+ pub position: i32,
|
|
|
}
|
|
|
|
|
|
#[derive(Deserialize)]
|
|
|
@@ -22,35 +23,36 @@ pub struct CreateWorkoutInput {
|
|
|
#[post("/workout")]
|
|
|
pub async fn create_workout(
|
|
|
pool: web::Data<PgPool>,
|
|
|
- _auth: AuthUser,
|
|
|
+ auth: AuthUser,
|
|
|
body: web::Json<CreateWorkoutInput>,
|
|
|
) -> HttpResponse {
|
|
|
let mut tx = match pool.begin().await {
|
|
|
Ok(t) => t,
|
|
|
- Err(_) => {
|
|
|
+ Err(e) => {
|
|
|
+ eprintln!("create_workout begin tx error: {e}");
|
|
|
return HttpResponse::InternalServerError().json(json!({"error": "An error occurred"}))
|
|
|
}
|
|
|
};
|
|
|
|
|
|
- let workout = match Workout::create(&mut *tx, &body.name).await {
|
|
|
+ let workout = match Workout::create(&mut *tx, auth.0.id, &body.name).await {
|
|
|
Ok(w) => w,
|
|
|
- Err(_) => {
|
|
|
+ Err(e) => {
|
|
|
+ eprintln!("create_workout insert workout error: {e}");
|
|
|
return HttpResponse::InternalServerError()
|
|
|
.json(json!({"error": "Failed to create workout"}))
|
|
|
}
|
|
|
};
|
|
|
|
|
|
for exercise in &body.exercises {
|
|
|
- if Exercise::create(&mut *tx, workout.id, &exercise.name, exercise.exercise_type.clone())
|
|
|
- .await
|
|
|
- .is_err()
|
|
|
- {
|
|
|
+ if let Err(e) = Exercise::create(&mut *tx, workout.id, &exercise.name, exercise.exercise_type.clone(), exercise.position).await {
|
|
|
+ eprintln!("create_workout insert exercise error: {e}");
|
|
|
return HttpResponse::InternalServerError()
|
|
|
.json(json!({"error": "Failed to create exercise"}));
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- if tx.commit().await.is_err() {
|
|
|
+ if let Err(e) = tx.commit().await {
|
|
|
+ eprintln!("create_workout commit error: {e}");
|
|
|
return HttpResponse::InternalServerError().json(json!({"error": "An error occurred"}));
|
|
|
}
|
|
|
|