package de.avalax.fitbuddy.port.adapter.persistence; import android.content.ContentValues; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import java.util.ArrayList; import java.util.List; import de.avalax.fitbuddy.domain.model.exercise.Exercise; import de.avalax.fitbuddy.domain.model.finished_exercise.BasicFinishedExercise; import de.avalax.fitbuddy.domain.model.finished_exercise.FinishedExercise; import de.avalax.fitbuddy.domain.model.finished_exercise.FinishedExerciseId; import de.avalax.fitbuddy.domain.model.finished_exercise.FinishedExerciseRepository; import de.avalax.fitbuddy.domain.model.finished_workout.FinishedWorkoutId; import de.avalax.fitbuddy.domain.model.set.Set; public class SQLiteFinishedExerciseRepository implements FinishedExerciseRepository { private static final String TABLE_FINISHED_EXERCISE = "finished_exercise"; private SQLiteOpenHelper sqLiteOpenHelper; public SQLiteFinishedExerciseRepository(SQLiteOpenHelper sqLiteOpenHelper) { this.sqLiteOpenHelper = sqLiteOpenHelper; } @Override public void save(FinishedWorkoutId finishedWorkoutId, Exercise exercise) { SQLiteDatabase database = sqLiteOpenHelper.getWritableDatabase(); for (Set set : exercise.getSets()) { ContentValues contentValues = getContentValues(finishedWorkoutId, exercise, set); database.insertOrThrow(TABLE_FINISHED_EXERCISE, null, contentValues); } database.close(); } private ContentValues getContentValues( FinishedWorkoutId finishedWorkoutId, Exercise exercise, Set set) { ContentValues values = new ContentValues(); values.put("finished_workout_id", finishedWorkoutId.getId()); values.put("name", exercise.getName()); values.put("weight", set.getWeight()); values.put("reps", set.getReps()); values.put("maxReps", set.getMaxReps()); return values; } @Override public List<FinishedExercise> allSetsBelongsTo(FinishedWorkoutId finishedWorkoutId) { List<FinishedExercise> finishedExercises = new ArrayList<>(); SQLiteDatabase database = sqLiteOpenHelper.getReadableDatabase(); String[] columns = {"id", "name", "weight", "reps", "maxReps"}; String[] args = {finishedWorkoutId.getId()}; Cursor cursor = database.query("finished_exercise", columns, "finished_workout_id=?", args, null, null, null); if (cursor.moveToFirst()) { do { FinishedExerciseId finishedExerciseId = new FinishedExerciseId(cursor.getString(0)); String name = cursor.getString(1); double weight = cursor.getDouble(2); int reps = cursor.getInt(3); int maxReps = cursor.getInt(4); FinishedExercise finishedExercise = new BasicFinishedExercise( finishedExerciseId, finishedWorkoutId, name, weight, reps, maxReps); finishedExercises.add(finishedExercise); } while (cursor.moveToNext()); } cursor.close(); database.close(); return finishedExercises; } }