diff --git a/app/src/main/java/com/example/mobileapp/database/MobileAppDataBase.kt b/app/src/main/java/com/example/mobileapp/database/MobileAppDataBase.kt index 239ccc7..f099384 100644 --- a/app/src/main/java/com/example/mobileapp/database/MobileAppDataBase.kt +++ b/app/src/main/java/com/example/mobileapp/database/MobileAppDataBase.kt @@ -1,11 +1,53 @@ package com.example.mobileapp.database +import android.content.Context import androidx.room.Database +import androidx.room.Room import androidx.room.RoomDatabase +import androidx.room.TypeConverters +import androidx.sqlite.db.SupportSQLiteDatabase +import com.example.mobileapp.database.dao.MailDao +import com.example.mobileapp.database.dao.StoryDao +import com.example.mobileapp.database.dao.UserDao +import com.example.mobileapp.database.entities.Converters import com.example.mobileapp.database.entities.Mail import com.example.mobileapp.database.entities.Story import com.example.mobileapp.database.entities.User +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch @Database(entities = [User::class, Story::class, Mail::class], version = 1, exportSchema = false) +@TypeConverters(Converters::class) abstract class MobileAppDataBase : RoomDatabase() { + abstract fun userDao(): UserDao + abstract fun storyDao(): StoryDao + abstract fun mailDao(): MailDao + + companion object{ + private const val DB_NAME: String = "mobileApp.db" + + @Volatile + private var INSTANCE: MobileAppDataBase? = null + + fun getInstance(appContext: Context): MobileAppDataBase { + return INSTANCE ?: synchronized(this) { + Room.databaseBuilder( + appContext, + MobileAppDataBase::class.java, + DB_NAME + ) + .addCallback(object : Callback() { + override fun onCreate(db: SupportSQLiteDatabase) { + super.onCreate(db) + CoroutineScope(Dispatchers.IO).launch { + //populateDatabase() + } + } + }) + .build() + .also { INSTANCE = it } + } + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/example/mobileapp/database/dao/MailDao.kt b/app/src/main/java/com/example/mobileapp/database/dao/MailDao.kt index a08670e..bacf1a5 100644 --- a/app/src/main/java/com/example/mobileapp/database/dao/MailDao.kt +++ b/app/src/main/java/com/example/mobileapp/database/dao/MailDao.kt @@ -1,7 +1,11 @@ package com.example.mobileapp.database.dao import androidx.room.Dao +import androidx.room.Delete +import androidx.room.Insert +import androidx.room.OnConflictStrategy import androidx.room.Query +import androidx.room.Update import com.example.mobileapp.database.entities.Mail import kotlinx.coroutines.flow.Flow @@ -9,4 +13,16 @@ import kotlinx.coroutines.flow.Flow interface MailDao { @Query("select * from mails") fun getAll(): Flow> + + @Query("select * from mails where mails.id = :id") + fun getById(id: Int): Mail? + + @Insert(onConflict = OnConflictStrategy.IGNORE) + suspend fun insert(mail: Mail) + + @Update + suspend fun update(mail: Mail) + + @Delete + suspend fun delete(mail: Mail) } \ No newline at end of file diff --git a/app/src/main/java/com/example/mobileapp/database/dao/StoryDao.kt b/app/src/main/java/com/example/mobileapp/database/dao/StoryDao.kt index 057de44..261a857 100644 --- a/app/src/main/java/com/example/mobileapp/database/dao/StoryDao.kt +++ b/app/src/main/java/com/example/mobileapp/database/dao/StoryDao.kt @@ -1,7 +1,11 @@ package com.example.mobileapp.database.dao import androidx.room.Dao +import androidx.room.Delete +import androidx.room.Insert +import androidx.room.OnConflictStrategy import androidx.room.Query +import androidx.room.Update import com.example.mobileapp.database.entities.Story import kotlinx.coroutines.flow.Flow @@ -9,4 +13,16 @@ import kotlinx.coroutines.flow.Flow interface StoryDao { @Query("select * from stories") fun getAll(): Flow> + + @Query("select * from stories where stories.id = :id") + fun getById(id: Int): Story? + + @Insert(onConflict = OnConflictStrategy.IGNORE) + suspend fun insert(story: Story) + + @Update + suspend fun update(story: Story) + + @Delete + suspend fun delete(story: Story) } \ No newline at end of file diff --git a/app/src/main/java/com/example/mobileapp/database/dao/UserDao.kt b/app/src/main/java/com/example/mobileapp/database/dao/UserDao.kt index a5ceafc..0de3004 100644 --- a/app/src/main/java/com/example/mobileapp/database/dao/UserDao.kt +++ b/app/src/main/java/com/example/mobileapp/database/dao/UserDao.kt @@ -1,7 +1,11 @@ package com.example.mobileapp.database.dao import androidx.room.Dao +import androidx.room.Delete +import androidx.room.Insert +import androidx.room.OnConflictStrategy import androidx.room.Query +import androidx.room.Update import com.example.mobileapp.database.entities.User import kotlinx.coroutines.flow.Flow @@ -9,4 +13,16 @@ import kotlinx.coroutines.flow.Flow interface UserDao { @Query("select * from users") fun getAll():Flow> + + @Query("select * from users where users.id = :id") + fun getById(id: Int): User? + + @Insert(onConflict = OnConflictStrategy.IGNORE) + suspend fun insert(user: User) + + @Update + suspend fun update(user: User) + + @Delete + suspend fun delete(user: User) } \ No newline at end of file diff --git a/app/src/main/java/com/example/mobileapp/database/entities/Converters.kt b/app/src/main/java/com/example/mobileapp/database/entities/Converters.kt new file mode 100644 index 0000000..a95d5cd --- /dev/null +++ b/app/src/main/java/com/example/mobileapp/database/entities/Converters.kt @@ -0,0 +1,20 @@ +package com.example.mobileapp.database.entities + +import android.graphics.Bitmap +import android.graphics.BitmapFactory +import androidx.room.TypeConverter +import java.io.ByteArrayOutputStream + +class Converters { + @TypeConverter + fun fromBitmap(bitmap: Bitmap) : ByteArray { + val outputStream = ByteArrayOutputStream(); + bitmap.compress(Bitmap.CompressFormat.PNG, 100, outputStream) + return outputStream.toByteArray() + } + + @TypeConverter + fun toBitmap(byteArray: ByteArray): Bitmap { + return BitmapFactory.decodeByteArray(byteArray, 0, byteArray.size) + } +} \ No newline at end of file