From b45183ebcc068b73693069c5f52772a3e0343faf Mon Sep 17 00:00:00 2001 From: maxnes3 <112558334+maxnes3@users.noreply.github.com> Date: Wed, 15 Nov 2023 22:21:16 +0400 Subject: [PATCH] =?UTF-8?q?=D0=9A=D0=BE=D0=B5-=D1=87=D1=82=D0=BE=20=D0=B4?= =?UTF-8?q?=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mobileapp/database/MobileAppDataBase.kt | 42 +++++++++++++++++++ .../example/mobileapp/database/dao/MailDao.kt | 16 +++++++ .../mobileapp/database/dao/StoryDao.kt | 16 +++++++ .../example/mobileapp/database/dao/UserDao.kt | 16 +++++++ .../mobileapp/database/entities/Converters.kt | 20 +++++++++ 5 files changed, 110 insertions(+) create mode 100644 app/src/main/java/com/example/mobileapp/database/entities/Converters.kt 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