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 de.avalax.fitbuddy.domain.model.exercise.ExerciseId; import de.avalax.fitbuddy.domain.model.set.BasicSet; import de.avalax.fitbuddy.domain.model.set.Set; import de.avalax.fitbuddy.domain.model.set.SetId; import de.avalax.fitbuddy.domain.model.set.SetRepository; import java.util.ArrayList; import java.util.List; public class SQLiteSetRepository implements SetRepository { private static final String TABLE_SET = "sets"; private SQLiteOpenHelper sqLiteOpenHelper; public SQLiteSetRepository(SQLiteOpenHelper sqLiteOpenHelper) { this.sqLiteOpenHelper = sqLiteOpenHelper; } @Override public void save(ExerciseId exerciseId, Set set) { SQLiteDatabase database = sqLiteOpenHelper.getWritableDatabase(); if (set.getSetId() == null) { long id = database.insertOrThrow(TABLE_SET, null, getContentValues(exerciseId, set)); set.setSetId(new SetId(String.valueOf(id))); } else { String[] args = {set.getSetId().getId()}; database.update(TABLE_SET, getContentValues(exerciseId, set), "id=?", args); } database.close(); } @Override public void delete(SetId id) { if (id == null) { return; } SQLiteDatabase database = sqLiteOpenHelper.getWritableDatabase(); database.delete(TABLE_SET, "id=?", new String[]{id.getId()}); database.close(); } @Override public List<Set> allSetsBelongsTo(ExerciseId exerciseId) { List<Set> sets = new ArrayList<>(); SQLiteDatabase database = sqLiteOpenHelper.getReadableDatabase(); Cursor cursor = database.query(TABLE_SET, new String[]{"id", "weight", "reps"}, "exercise_id=?", new String[]{exerciseId.getId()}, null, null, null); if (cursor.moveToFirst()) { do { SetId setId = new SetId(cursor.getString(0)); double weight = cursor.getDouble(1); int maxReps = cursor.getInt(2); Set set = new BasicSet(setId, weight, maxReps); sets.add(set); } while (cursor.moveToNext()); } cursor.close(); return sets; } private ContentValues getContentValues(ExerciseId exerciseId, Set set) { ContentValues values = new ContentValues(); values.put("exercise_id", exerciseId.getId()); values.put("weight", set.getWeight()); values.put("reps", set.getMaxReps()); return values; } }