📦 Mise en place de toute la base de donnée, pas encore testé 🐛

DAO
Pierre FERREIRA 2 years ago
parent e69cf0ca8d
commit 625822766a

@ -1,6 +1,7 @@
plugins { plugins {
id 'com.android.application' id 'com.android.application'
id 'org.jetbrains.kotlin.android' id 'org.jetbrains.kotlin.android'
id 'kotlin-kapt'
} }
android { android {
@ -42,6 +43,8 @@ android {
} }
} }
apply plugin: 'kotlin-kapt'
dependencies { dependencies {
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.9' implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.9'
@ -50,9 +53,16 @@ dependencies {
implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'com.google.android.material:material:1.8.0' implementation 'com.google.android.material:material:1.8.0'
implementation 'androidx.gridlayout:gridlayout:1.0.0' implementation 'androidx.gridlayout:gridlayout:1.0.0'
implementation 'androidx.room:room-common:2.5.1'
testImplementation 'junit:junit:4.13.2' testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.5' androidTestImplementation 'androidx.test.ext:junit:1.1.5'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1' androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
//room
implementation "androidx.room:room-runtime:2.5.1"
kapt "androidx.room:room-compiler:2.5.1"
implementation "androidx.room:room-ktx:2.5.1"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.2"
} }
//viewBinding { //viewBinding {

@ -1,16 +1,43 @@
package iut.android.pierrepierre.model.Activity package iut.android.pierrepierre.model.Activity
import android.content.Context
import android.os.Bundle import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import iut.android.pierrepierre.R import iut.android.pierrepierre.R
import android.content.Intent import android.content.Intent
import android.view.View import android.view.View
import android.widget.Button
import androidx.room.Room
import iut.android.pierrepierre.model.Class.User
import iut.android.pierrepierre.model.DB.DAO.UserDAO
import iut.android.pierrepierre.model.DB.Entity.UserEntity
import iut.android.pierrepierre.model.DB.RoomDB
import java.util.*
class MenuActivity : AppCompatActivity() { class MenuActivity : AppCompatActivity() {
private lateinit var db: RoomDB
private lateinit var userDao: UserDAO
private lateinit var user : User
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
setContentView(R.layout.activity_menu) setContentView(R.layout.activity_menu)
//BDD
// Initialisation BDD
db = Room.databaseBuilder(applicationContext, RoomDB::class.java, "MyDataBase").build()
userDao = db.userDao()
// Générer un ID unique pour l'utilisateur
val uniqueID = getUniqueUserID()
// Charger le score de l'utilisateur s'il existe
val userE = userDao.getUserById(uniqueID)
if (userE != null) {
val userScore = userE.score
user = userE.toUser()
}
} }
fun onClickJouer(view: View) { fun onClickJouer(view: View) {
@ -20,9 +47,36 @@ class MenuActivity : AppCompatActivity() {
fun onClickScores(view: View) { fun onClickScores(view: View) {
//TODO Ajouter l'action correspondant à Scores //TODO Ajouter l'action correspondant à Scores
//FIXME tmp
var v = findViewById<Button>(R.id.btn_scores)
v.text = user.score.toString()
} }
fun onClickQuitter(view: View) { fun onClickQuitter(view: View) {
finishAffinity() finishAffinity()
} }
private fun getUniqueUserID(): String {
val prefs = getSharedPreferences("MyappPrefs", Context.MODE_PRIVATE)
var uniqueID = prefs.getString("unique-user-id", "")
if (uniqueID.isNullOrEmpty()) {
uniqueID = UUID.randomUUID().toString()
prefs.edit().putString("unique-user-id", uniqueID).apply()
}
return uniqueID
}
/// Convertisseur
// UserEntity en User
fun UserEntity.toUser(): User {
return User(score = this.score, nbMiss = this.nbMiss)
}
// User en UserEntity
fun User.toUserEntity(): UserEntity {
return UserEntity(score = this.score, nbMiss = this.nbMiss)
}
} }

@ -0,0 +1,14 @@
package iut.android.pierrepierre.model.DB
import androidx.room.Database
import androidx.room.RoomDatabase
import iut.android.pierrepierre.model.Class.User
import iut.android.pierrepierre.model.DB.DAO.UserDAO
import iut.android.pierrepierre.model.DB.Entity.UserEntity
//@Database(entities = arrayOf(UserEntity::class), version = 1)
//abstract class BDD : RoomDatabase(){
// abstract fun daoUser() : UserDAO
//}
//FIXME useless car "abstract fun daoUser() : UserDAO" definis dans room

@ -0,0 +1,29 @@
package iut.android.pierrepierre.model.DB.DAO
import androidx.room.Dao
import androidx.room.Delete
import androidx.room.Insert
import androidx.room.Query
import iut.android.pierrepierre.model.DB.Entity.UserEntity
@Dao
interface UserDAO {
@Insert
fun insererUser(u : UserEntity)
@Delete
fun DeleteUser(u : UserEntity)
@Query("SELECT * FROM user WHERE user.id = :id")
fun getUserById(id: String): UserEntity?
@Query("SELECT score FROM user ")
fun getUserScore()//liste des scores
@Query("SELECT nbMiss FROM user ")
fun getUserMiss()//liste des scores
@Query("SELECT max(score) FROM user ")
fun getUserBestScore()//list des scores
}

@ -0,0 +1,14 @@
package iut.android.pierrepierre.model.DB.Entity
import androidx.room.Entity
import androidx.room.PrimaryKey
import iut.android.pierrepierre.model.Class.User
import java.util.*
@Entity(tableName = "user")
class UserEntity(
@PrimaryKey val id: String = UUID.randomUUID().toString(),
val score: Int,
val nbMiss: Int
)

@ -0,0 +1,30 @@
package iut.android.pierrepierre.model.DB
import android.content.Context
import androidx.room.Database
import androidx.room.Room
import androidx.room.RoomDatabase
import iut.android.pierrepierre.model.DB.DAO.UserDAO
import iut.android.pierrepierre.model.DB.Entity.UserEntity
@Database(entities = [UserEntity::class], version = 1)
abstract class RoomDB : RoomDatabase() {
abstract fun userDao(): UserDAO //remplace BDD.kt
companion object {
private var INSTANCE: RoomDB? = null
fun getDatabase(context: Context) {
INSTANCE ?: synchronized(this) {
val instance = Room.databaseBuilder(
context.applicationContext,
RoomDB::class.java,
"MyDataBase"
).build()
INSTANCE = instance
instance
}
}
}
}
Loading…
Cancel
Save