Merge pull request 'ローカルにキャッシュ用のDBを追加' (#81) from feature/local_cache_db into main

Reviewed-on: #81
This commit is contained in:
Fujimatsu 2024-06-22 18:10:11 +00:00
commit 2b434302df
11 changed files with 134 additions and 1 deletions

View File

@ -1 +1,8 @@
# WIP
# WIP
## メモ
- リリース前(=提出前)には`DEBUG_ONLY`で検索してチェック(念のため)
## リリース前チェック
- DBの破壊的マイグレーションを許可するオプションを無効に
-

View File

@ -47,4 +47,8 @@ dependencies {
// Retrofit
implementation libs.retrofit
implementation libs.converter.gson
// Room
implementation libs.androidx.room.runtime
annotationProcessor libs.androidx.room.compiler
}

View File

@ -0,0 +1,22 @@
package one.nem.kidshift.data.room;
import androidx.room.Database;
import androidx.room.RoomDatabase;
import one.nem.kidshift.data.room.dao.ChildCacheDao;
import one.nem.kidshift.data.room.dao.TaskCacheDao;
import one.nem.kidshift.data.room.dao.TaskChildLinkageDao;
import one.nem.kidshift.data.room.entity.ChildCacheEntity;
import one.nem.kidshift.data.room.entity.TaskCacheEntity;
import one.nem.kidshift.data.room.entity.TaskChildLinkageEntity;
@Database(entities = {ChildCacheEntity.class, TaskCacheEntity.class, TaskChildLinkageEntity.class}, version = 1)
public abstract class KidShiftDatabase extends RoomDatabase {
public abstract ChildCacheDao childCacheDao();
public abstract TaskCacheDao taskCacheDao();
public abstract TaskChildLinkageDao taskChildLinkageDao();
}

View File

@ -0,0 +1,26 @@
package one.nem.kidshift.data.room;
import android.content.Context;
import androidx.room.Room;
import dagger.Module;
import dagger.Provides;
import dagger.hilt.InstallIn;
import dagger.hilt.android.qualifiers.ApplicationContext;
import dagger.hilt.components.SingletonComponent;
@Module
@InstallIn(SingletonComponent.class)
public class KidShiftDatabaseModule {
@Provides
public static KidShiftDatabase provideKidShiftDatabase(@ApplicationContext Context context) {
return Room.databaseBuilder(context,
KidShiftDatabase.class,
"cache.db")
.fallbackToDestructiveMigration() // DEBUG_ONLY Migrationがない場合に破壊的なマイグレーションを行うことを許可
.fallbackToDestructiveMigrationOnDowngrade() // DEBUG_ONLY ダウングレード時に破壊的なマイグレーションを行うことを許可
.build();
}
}

View File

@ -0,0 +1,4 @@
package one.nem.kidshift.data.room.dao;
public interface ChildCacheDao {
}

View File

@ -0,0 +1,4 @@
package one.nem.kidshift.data.room.dao;
public interface TaskCacheDao {
}

View File

@ -0,0 +1,4 @@
package one.nem.kidshift.data.room.dao;
public interface TaskChildLinkageDao {
}

View File

@ -0,0 +1,16 @@
package one.nem.kidshift.data.room.entity;
import androidx.room.ColumnInfo;
import androidx.room.Entity;
import androidx.room.PrimaryKey;
@Entity(tableName = "child_cache")
public class ChildCacheEntity {
@PrimaryKey
@ColumnInfo(name = "id")
private String Id;
@ColumnInfo(name = "display_name")
private String displayName;
}

View File

@ -0,0 +1,22 @@
package one.nem.kidshift.data.room.entity;
import androidx.room.ColumnInfo;
import androidx.room.Entity;
import androidx.room.PrimaryKey;
@Entity(tableName = "task_cache")
public class TaskCacheEntity {
@PrimaryKey
@ColumnInfo(name = "id")
private String Id;
@ColumnInfo(name = "display_name")
private String displayName;
@ColumnInfo(name = "icon_emoji")
private String iconEmoji;
@ColumnInfo(name = "reward")
private int reward;
}

View File

@ -0,0 +1,20 @@
package one.nem.kidshift.data.room.entity;
import androidx.room.ColumnInfo;
import androidx.room.Entity;
import androidx.room.PrimaryKey;
@Entity(tableName = "task_child_linkage")
public class TaskChildLinkageEntity {
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "id")
private int id;
@ColumnInfo(name = "task_id")
private String taskId;
@ColumnInfo(name = "child_id")
private String childId;
}

View File

@ -10,6 +10,7 @@ activity = "1.9.0"
constraintlayout = "2.1.4"
nav = "2.7.7"
retrofit = "2.11.0"
room = "2.5.0"
[libraries]
converter-gson = { module = "com.squareup.retrofit2:converter-gson", version.ref = "retrofit" }
@ -30,6 +31,9 @@ navigation-ui = { group="androidx.navigation", name="navigation-ui", version.ref
navigation-dynamic-features-fragment = { group="androidx.navigation", name="navigation-dynamic-features-fragment", version.ref="nav"}
retrofit = { module = "com.squareup.retrofit2:retrofit", version.ref = "retrofit" }
androidx-room-runtime = { group = "androidx.room", name = "room-runtime", version.ref = "room" }
androidx-room-compiler = { group = "androidx.room", name = "room-compiler", version.ref = "room" }
[plugins]
androidApplication = { id = "com.android.application", version.ref = "agp" }
androidLibrary = { id = "com.android.library", version.ref = "agp" }