From cb95747e653dd8b52086e19c9a8c6a1bc9898c08 Mon Sep 17 00:00:00 2001 From: emkartal1 Date: Sun, 9 Apr 2023 12:58:49 +0200 Subject: [PATCH] Realization of the DAO Competition and the Database :floppy_disk: --- src/app/build.gradle | 5 +++ .../main/java/uca/iut/clermont/data/BDD.kt | 31 +++++++++++++++++++ .../iut/clermont/data/dao/CompetitionDao.kt | 22 +++++++++++++ .../uca/iut/clermont/model/Competition.kt | 17 ++++++---- .../view/viewModel/DetailViewModel.kt | 19 +++++++++--- .../view/viewModel/FavoriteViewModel.kt | 7 ++++- 6 files changed, 89 insertions(+), 12 deletions(-) create mode 100644 src/app/src/main/java/uca/iut/clermont/data/BDD.kt create mode 100644 src/app/src/main/java/uca/iut/clermont/data/dao/CompetitionDao.kt diff --git a/src/app/build.gradle b/src/app/build.gradle index 0c2eeee..0876475 100644 --- a/src/app/build.gradle +++ b/src/app/build.gradle @@ -32,6 +32,7 @@ android { } } +apply plugin: 'kotlin-kapt' dependencies { // Navigation implementation 'androidx.navigation:navigation-fragment-ktx:2.5.3' @@ -45,6 +46,10 @@ dependencies { implementation 'com.squareup.retrofit2:retrofit:2.9.0' implementation 'com.squareup.retrofit2:converter-gson:2.9.0' + // Room + implementation 'androidx.room:room-runtime:2.5.1' + implementation 'androidx.room:room-ktx:2.5.1' + implementation 'androidx.core:core-ktx:1.9.0' implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'com.google.android.material:material:1.8.0' diff --git a/src/app/src/main/java/uca/iut/clermont/data/BDD.kt b/src/app/src/main/java/uca/iut/clermont/data/BDD.kt new file mode 100644 index 0000000..78f6798 --- /dev/null +++ b/src/app/src/main/java/uca/iut/clermont/data/BDD.kt @@ -0,0 +1,31 @@ +package uca.iut.clermont.data + +import android.content.Context +import androidx.room.Database +import androidx.room.Room +import androidx.room.RoomDatabase +import uca.iut.clermont.data.dao.CompetitionDao +import uca.iut.clermont.model.Competition + +@Database(entities = arrayOf(Competition::class), version = 1) +abstract class BDD : RoomDatabase() { + + abstract fun competitionDao(): CompetitionDao + + companion object { + + private var INSTANCE: BDD? = null + + fun getInstance(context: Context) = + INSTANCE ?: synchronized(this) { + val db = Room.databaseBuilder( + context, + BDD::class.java, + "ScorItDB" + ).build() + INSTANCE = db + } + + } + +} \ No newline at end of file diff --git a/src/app/src/main/java/uca/iut/clermont/data/dao/CompetitionDao.kt b/src/app/src/main/java/uca/iut/clermont/data/dao/CompetitionDao.kt new file mode 100644 index 0000000..1cd904c --- /dev/null +++ b/src/app/src/main/java/uca/iut/clermont/data/dao/CompetitionDao.kt @@ -0,0 +1,22 @@ +package uca.iut.clermont.data.dao + +import androidx.room.Dao +import androidx.room.Delete +import androidx.room.Insert +import androidx.room.Query +import kotlinx.coroutines.flow.Flow +import uca.iut.clermont.model.Competition + +@Dao +interface CompetitionDao { + + @Delete + fun deleteCompetition(competition: Competition) + + @Query("SELECT * FROM competition") + fun getAllCompetitions(): Flow> + + @Insert + fun insertCompetition(competition: Competition) + +} \ No newline at end of file diff --git a/src/app/src/main/java/uca/iut/clermont/model/Competition.kt b/src/app/src/main/java/uca/iut/clermont/model/Competition.kt index 103a57a..ade30ee 100644 --- a/src/app/src/main/java/uca/iut/clermont/model/Competition.kt +++ b/src/app/src/main/java/uca/iut/clermont/model/Competition.kt @@ -1,11 +1,16 @@ package uca.iut.clermont.model +import androidx.room.ColumnInfo +import androidx.room.Entity +import androidx.room.PrimaryKey + +@Entity(tableName = "competitions") class Competition( - val id: Int, - val name: String, - val code: String, - val type: String, - val emblem: String, - val currentSeason: Season, + @PrimaryKey val id: Int, + @ColumnInfo val name: String, + @ColumnInfo val code: String, + @ColumnInfo val type: String, + @ColumnInfo val emblem: String, + @ColumnInfo val currentSeason: Season, val area: Area ) \ No newline at end of file diff --git a/src/app/src/main/java/uca/iut/clermont/view/viewModel/DetailViewModel.kt b/src/app/src/main/java/uca/iut/clermont/view/viewModel/DetailViewModel.kt index 13e5961..2c94601 100644 --- a/src/app/src/main/java/uca/iut/clermont/view/viewModel/DetailViewModel.kt +++ b/src/app/src/main/java/uca/iut/clermont/view/viewModel/DetailViewModel.kt @@ -9,13 +9,21 @@ import uca.iut.clermont.model.Competition import uca.iut.clermont.model.Match import java.util.* -class DetailViewModel : ViewModel() { +class DetailViewModel( + //val dao: CompetitionDao +) : ViewModel() { val manager = ApiManager() val competition = MutableLiveData() val competitionMatches = MutableLiveData>() val nbCompetitionMatches = MutableLiveData() + /*fun insertCompetition(competition: Competition) = + viewModelScope.launch { + dao.insertCompetition(competition) + } + */ + fun loadCurrentCompetition(id: Int) = viewModelScope.launch { val result = manager.competitionsMgr.getItemById(id) competition.value = result @@ -24,10 +32,11 @@ class DetailViewModel : ViewModel() { fun loadMatches(id: Int) = viewModelScope.launch { val matchResults = manager.matchesMgr.getItemsByCompetition(id) - competitionMatches.value = matchResults.filter { it.status != "TIMED" && it.status != "SCHEDULED" } - .apply { forEach { it.date.add(Calendar.HOUR_OF_DAY, 2) } } - .sortedBy { it.competition.name } - .sortedByDescending { it.date } + competitionMatches.value = + matchResults.filter { it.status != "TIMED" && it.status != "SCHEDULED" } + .apply { forEach { it.date.add(Calendar.HOUR_OF_DAY, 2) } } + .sortedBy { it.competition.name } + .sortedByDescending { it.date } } fun loadNumberMatches() = viewModelScope.launch { diff --git a/src/app/src/main/java/uca/iut/clermont/view/viewModel/FavoriteViewModel.kt b/src/app/src/main/java/uca/iut/clermont/view/viewModel/FavoriteViewModel.kt index 5cfe77c..f84c449 100644 --- a/src/app/src/main/java/uca/iut/clermont/view/viewModel/FavoriteViewModel.kt +++ b/src/app/src/main/java/uca/iut/clermont/view/viewModel/FavoriteViewModel.kt @@ -7,11 +7,16 @@ import kotlinx.coroutines.launch import uca.iut.clermont.api.ApiManager import uca.iut.clermont.model.Competition -class FavoriteViewModel : ViewModel() { +class FavoriteViewModel( + //val dao: CompetitionDao +) : ViewModel() { val manager = ApiManager() val competitions = MutableLiveData>() + //fun getAllCompetitions() = dao.getAllCompetitions() + //.isLiveDate() + fun loadCompetitions() = viewModelScope.launch { val result = manager.competitionsMgr.getItems() competitions.value = result