diff --git a/README.md b/README.md index 1a1aebe..a301130 100644 --- a/README.md +++ b/README.md @@ -1 +1,8 @@ -# WIP \ No newline at end of file +# WIP + +## メモ +- リリース前(=提出前)には`DEBUG_ONLY`で検索してチェック(念のため) + +## リリース前チェック +- DBの破壊的マイグレーションを許可するオプションを無効に +- \ No newline at end of file diff --git a/data/build.gradle b/data/build.gradle index 6d247a4..ee751ea 100644 --- a/data/build.gradle +++ b/data/build.gradle @@ -47,4 +47,8 @@ dependencies { // Retrofit implementation libs.retrofit implementation libs.converter.gson + + // Room + implementation libs.androidx.room.runtime + annotationProcessor libs.androidx.room.compiler } \ No newline at end of file diff --git a/data/src/main/java/one/nem/kidshift/data/room/KidShiftDatabase.java b/data/src/main/java/one/nem/kidshift/data/room/KidShiftDatabase.java new file mode 100644 index 0000000..051247c --- /dev/null +++ b/data/src/main/java/one/nem/kidshift/data/room/KidShiftDatabase.java @@ -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(); + +} diff --git a/data/src/main/java/one/nem/kidshift/data/room/KidShiftDatabaseModule.java b/data/src/main/java/one/nem/kidshift/data/room/KidShiftDatabaseModule.java new file mode 100644 index 0000000..e5d2b4e --- /dev/null +++ b/data/src/main/java/one/nem/kidshift/data/room/KidShiftDatabaseModule.java @@ -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(); + } +} diff --git a/data/src/main/java/one/nem/kidshift/data/room/dao/ChildCacheDao.java b/data/src/main/java/one/nem/kidshift/data/room/dao/ChildCacheDao.java new file mode 100644 index 0000000..3f1f431 --- /dev/null +++ b/data/src/main/java/one/nem/kidshift/data/room/dao/ChildCacheDao.java @@ -0,0 +1,4 @@ +package one.nem.kidshift.data.room.dao; + +public interface ChildCacheDao { +} diff --git a/data/src/main/java/one/nem/kidshift/data/room/dao/TaskCacheDao.java b/data/src/main/java/one/nem/kidshift/data/room/dao/TaskCacheDao.java new file mode 100644 index 0000000..a3de814 --- /dev/null +++ b/data/src/main/java/one/nem/kidshift/data/room/dao/TaskCacheDao.java @@ -0,0 +1,4 @@ +package one.nem.kidshift.data.room.dao; + +public interface TaskCacheDao { +} diff --git a/data/src/main/java/one/nem/kidshift/data/room/dao/TaskChildLinkageDao.java b/data/src/main/java/one/nem/kidshift/data/room/dao/TaskChildLinkageDao.java new file mode 100644 index 0000000..2df14e7 --- /dev/null +++ b/data/src/main/java/one/nem/kidshift/data/room/dao/TaskChildLinkageDao.java @@ -0,0 +1,4 @@ +package one.nem.kidshift.data.room.dao; + +public interface TaskChildLinkageDao { +} diff --git a/data/src/main/java/one/nem/kidshift/data/room/entity/ChildCacheEntity.java b/data/src/main/java/one/nem/kidshift/data/room/entity/ChildCacheEntity.java new file mode 100644 index 0000000..dcd63cd --- /dev/null +++ b/data/src/main/java/one/nem/kidshift/data/room/entity/ChildCacheEntity.java @@ -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; +} diff --git a/data/src/main/java/one/nem/kidshift/data/room/entity/TaskCacheEntity.java b/data/src/main/java/one/nem/kidshift/data/room/entity/TaskCacheEntity.java new file mode 100644 index 0000000..261cec2 --- /dev/null +++ b/data/src/main/java/one/nem/kidshift/data/room/entity/TaskCacheEntity.java @@ -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; +} diff --git a/data/src/main/java/one/nem/kidshift/data/room/entity/TaskChildLinkageEntity.java b/data/src/main/java/one/nem/kidshift/data/room/entity/TaskChildLinkageEntity.java new file mode 100644 index 0000000..e9a95e3 --- /dev/null +++ b/data/src/main/java/one/nem/kidshift/data/room/entity/TaskChildLinkageEntity.java @@ -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; + +} diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 932a232..e63ecf3 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -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" }