diff --git a/MykSuite/schemas/com.infomaniak.core.myksuite.ui.data.MyKSuiteDatabase/1.json b/MykSuite/schemas/com.infomaniak.core.myksuite.ui.data.MyKSuiteDatabase/1.json index 21cabad0..2feec569 100644 --- a/MykSuite/schemas/com.infomaniak.core.myksuite.ui.data.MyKSuiteDatabase/1.json +++ b/MykSuite/schemas/com.infomaniak.core.myksuite.ui.data.MyKSuiteDatabase/1.json @@ -2,11 +2,11 @@ "formatVersion": 1, "database": { "version": 1, - "identityHash": "7b5e43bd9cc17b034cf90891e63090d7", + "identityHash": "daf7033b58a05ae65b82dee555601e73", "entities": [ { "tableName": "MyKSuiteData", - "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER NOT NULL, `status` TEXT NOT NULL, `pack_id` INTEGER NOT NULL, `trialExpiryAt` INTEGER, `is_free` INTEGER NOT NULL, `has_auto_renew` INTEGER NOT NULL, `canTrial` INTEGER NOT NULL, `user_id` INTEGER NOT NULL, `k_suite_pack_id` INTEGER NOT NULL, `k_suite_pack_name` TEXT NOT NULL, `k_suite_pack_drive_storage` INTEGER NOT NULL, `k_suite_pack_mail_storage` INTEGER NOT NULL, `k_suite_pack_mail_daily_limit_send` INTEGER NOT NULL, `k_suite_pack_is_max_storage_offer` INTEGER NOT NULL, `drive_id` INTEGER NOT NULL, `drive_name` TEXT NOT NULL, `drive_size` INTEGER NOT NULL, `drive_used_size` INTEGER NOT NULL, `mail_id` INTEGER NOT NULL, `mail_email` TEXT NOT NULL, `mail_daily_limit_sent` INTEGER NOT NULL, `mail_storage_size_limit` INTEGER NOT NULL, `mail_used_size` INTEGER NOT NULL, `mail_mailboxId` INTEGER NOT NULL, PRIMARY KEY(`id`))", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER NOT NULL, `trial_expiry_at` INTEGER, `is_free` INTEGER NOT NULL, `user_id` INTEGER NOT NULL, `drive_id` INTEGER NOT NULL, `drive_name` TEXT NOT NULL, `drive_size` INTEGER NOT NULL, `drive_used_size` INTEGER NOT NULL, `mail_id` INTEGER NOT NULL, `mail_email` TEXT NOT NULL, `mail_daily_limit_sent` INTEGER NOT NULL, `mail_storage_size_limit` INTEGER NOT NULL, `mail_used_size` INTEGER NOT NULL, `mail_mailbox_id` INTEGER NOT NULL, PRIMARY KEY(`id`))", "fields": [ { "fieldPath": "id", @@ -14,21 +14,9 @@ "affinity": "INTEGER", "notNull": true }, - { - "fieldPath": "status", - "columnName": "status", - "affinity": "TEXT", - "notNull": true - }, - { - "fieldPath": "kSuitePackId", - "columnName": "pack_id", - "affinity": "INTEGER", - "notNull": true - }, { "fieldPath": "trialExpiryAt", - "columnName": "trialExpiryAt", + "columnName": "trial_expiry_at", "affinity": "INTEGER", "notNull": false }, @@ -38,60 +26,12 @@ "affinity": "INTEGER", "notNull": true }, - { - "fieldPath": "hasAutoRenew", - "columnName": "has_auto_renew", - "affinity": "INTEGER", - "notNull": true - }, - { - "fieldPath": "canTrial", - "columnName": "canTrial", - "affinity": "INTEGER", - "notNull": true - }, { "fieldPath": "userId", "columnName": "user_id", "affinity": "INTEGER", "notNull": true }, - { - "fieldPath": "kSuitePack.id", - "columnName": "k_suite_pack_id", - "affinity": "INTEGER", - "notNull": true - }, - { - "fieldPath": "kSuitePack.name", - "columnName": "k_suite_pack_name", - "affinity": "TEXT", - "notNull": true - }, - { - "fieldPath": "kSuitePack.driveStorage", - "columnName": "k_suite_pack_drive_storage", - "affinity": "INTEGER", - "notNull": true - }, - { - "fieldPath": "kSuitePack.mailStorage", - "columnName": "k_suite_pack_mail_storage", - "affinity": "INTEGER", - "notNull": true - }, - { - "fieldPath": "kSuitePack.mailDailyLimitSend", - "columnName": "k_suite_pack_mail_daily_limit_send", - "affinity": "INTEGER", - "notNull": true - }, - { - "fieldPath": "kSuitePack.isMaxStorageOffer", - "columnName": "k_suite_pack_is_max_storage_offer", - "affinity": "INTEGER", - "notNull": true - }, { "fieldPath": "drive.id", "columnName": "drive_id", @@ -148,7 +88,7 @@ }, { "fieldPath": "mail.mailboxId", - "columnName": "mail_mailboxId", + "columnName": "mail_mailbox_id", "affinity": "INTEGER", "notNull": true } @@ -166,7 +106,7 @@ "views": [], "setupQueries": [ "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", - "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '7b5e43bd9cc17b034cf90891e63090d7')" + "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'daf7033b58a05ae65b82dee555601e73')" ] } } \ No newline at end of file diff --git a/MykSuite/src/main/java/com/infomaniak/core/myksuite/ui/data/KSuitePack.kt b/MykSuite/src/main/java/com/infomaniak/core/myksuite/ui/data/KSuitePack.kt deleted file mode 100644 index 36447910..00000000 --- a/MykSuite/src/main/java/com/infomaniak/core/myksuite/ui/data/KSuitePack.kt +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Infomaniak Core - Android - * Copyright (C) 2025 Infomaniak Network SA - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.infomaniak.core.myksuite.ui.data - -import androidx.annotation.StringRes -import androidx.room.ColumnInfo -import com.infomaniak.core.myksuite.R -import kotlinx.serialization.SerialName -import kotlinx.serialization.Serializable - -@Serializable -data class KSuitePack( - val id: Int, - val name: String = "", - @SerialName("drive_storage") - @ColumnInfo("drive_storage") - val driveStorage: Long = 0, - @SerialName("mail_storage") - @ColumnInfo("mail_storage") - val mailStorage: Long = 0, - @SerialName("mail_daily_limit_send") - @ColumnInfo("mail_daily_limit_send") - val mailDailyLimitSend: Int = 0, - @SerialName("is_max_storage_offer") - @ColumnInfo("is_max_storage_offer") - val isMaxStorageOffer: Boolean = false, -) { - - val type get() = runCatching { enumValueOf(name.uppercase()) }.getOrNull() - - enum class KSuitePackType(@StringRes val displayNameRes: Int) { - MY_KSUITE(R.string.myKSuiteName), - MY_KSUITE_PLUS(R.string.myKSuitePlusName), - MY_KSUITE_PLUS_DRIVE_SOLO(R.string.myKSuitePlusName), - } -} diff --git a/MykSuite/src/main/java/com/infomaniak/core/myksuite/ui/data/MyKSuiteData.kt b/MykSuite/src/main/java/com/infomaniak/core/myksuite/ui/data/MyKSuiteData.kt index 64faf244..cf1c3f42 100644 --- a/MykSuite/src/main/java/com/infomaniak/core/myksuite/ui/data/MyKSuiteData.kt +++ b/MykSuite/src/main/java/com/infomaniak/core/myksuite/ui/data/MyKSuiteData.kt @@ -21,6 +21,8 @@ import androidx.room.ColumnInfo import androidx.room.Embedded import androidx.room.Entity import androidx.room.PrimaryKey +import com.infomaniak.core.myksuite.R +import com.infomaniak.core.myksuite.ui.components.MyKSuiteTier import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable import kotlinx.serialization.Transient @@ -30,13 +32,6 @@ import java.util.Date @Entity data class MyKSuiteData( @PrimaryKey val id: Int, - val status: String, - @SerialName("pack_id") - @ColumnInfo("pack_id") - val kSuitePackId: Int, - @SerialName("pack") - @Embedded("k_suite_pack_") - val kSuitePack: KSuitePack, @SerialName("trial_expiry_at") @ColumnInfo("trial_expiry_at") val trialExpiryAt: Long? = null, @@ -47,22 +42,13 @@ data class MyKSuiteData( val drive: KSuiteDrive, @Embedded("mail_") val mail: KSuiteMail, - @SerialName("has_auto_renew") - @ColumnInfo("has_auto_renew") - val hasAutoRenew: Boolean, - @SerialName("can_trial") - @ColumnInfo("can_trial") - val canTrial: Boolean, ) { @Transient @ColumnInfo("user_id") var userId: Int = 0 - val isMyKSuite get() = kSuitePack.type == KSuitePack.KSuitePackType.MY_KSUITE - val isMyKSuitePlus - get() = kSuitePack.type == KSuitePack.KSuitePackType.MY_KSUITE_PLUS || - kSuitePack.type == KSuitePack.KSuitePackType.MY_KSUITE_PLUS_DRIVE_SOLO - + inline val name get() = if (isFree) R.string.myKSuiteName else R.string.myKSuitePlusName + inline val tier get() = if (isFree) MyKSuiteTier.Free else MyKSuiteTier.Plus inline val trialExpiryDate get() = trialExpiryAt?.let { Date(it * 1000) } } diff --git a/MykSuite/src/main/java/com/infomaniak/core/myksuite/ui/data/MyKSuiteDataDao.kt b/MykSuite/src/main/java/com/infomaniak/core/myksuite/ui/data/MyKSuiteDataDao.kt index 2e3b2c30..ff702459 100644 --- a/MykSuite/src/main/java/com/infomaniak/core/myksuite/ui/data/MyKSuiteDataDao.kt +++ b/MykSuite/src/main/java/com/infomaniak/core/myksuite/ui/data/MyKSuiteDataDao.kt @@ -24,10 +24,6 @@ import androidx.room.Upsert @Dao interface MyKSuiteDataDao { - - @Query("SELECT * FROM MyKSuiteData") - suspend fun getAll(): List - @Query("SELECT * FROM MyKSuiteData WHERE id = :id LIMIT 1") suspend fun findById(id: Int): MyKSuiteData? diff --git a/MykSuite/src/main/java/com/infomaniak/core/myksuite/ui/data/MyKSuiteDataManager.kt b/MykSuite/src/main/java/com/infomaniak/core/myksuite/ui/data/MyKSuiteDataManager.kt index b4d5e9b1..99f91ee3 100644 --- a/MykSuite/src/main/java/com/infomaniak/core/myksuite/ui/data/MyKSuiteDataManager.kt +++ b/MykSuite/src/main/java/com/infomaniak/core/myksuite/ui/data/MyKSuiteDataManager.kt @@ -21,9 +21,8 @@ import android.content.Context abstract class MyKSuiteDataManager { - abstract var myKSuiteId: Int abstract var myKSuite: MyKSuiteData? - abstract val userId: Int + protected abstract val currentUserId: Int private var myKSuiteDatabase: MyKSuiteDatabase? = null @@ -37,15 +36,17 @@ abstract class MyKSuiteDataManager { suspend fun upsertKSuiteData(kSuiteData: MyKSuiteData) { myKSuite = kSuiteData - myKSuiteDatabase?.myKSuiteDataDao()?.upsert(kSuiteData.apply { userId = this@MyKSuiteDataManager.userId }) + myKSuiteDatabase?.myKSuiteDataDao()?.upsert(kSuiteData.apply { userId = this@MyKSuiteDataManager.currentUserId }) } - suspend fun deleteKSuiteData(kSuiteData: MyKSuiteData) { + suspend fun deleteKSuiteData(userId: Int) { + (getKSuiteDataByUser(userId) ?: myKSuite)?.let { myKSuiteDatabase?.myKSuiteDataDao()?.delete(it) } myKSuite = null - myKSuiteDatabase?.myKSuiteDataDao()?.delete(kSuiteData) } private suspend fun getKSuiteData(id: Int) = myKSuiteDatabase?.myKSuiteDataDao()?.findById(id) - private suspend fun getKSuiteDataByUser() = myKSuiteDatabase?.myKSuiteDataDao()?.findByUserId(userId) + private suspend fun getKSuiteDataByUser(userId: Int? = null): MyKSuiteData? { + return myKSuiteDatabase?.myKSuiteDataDao()?.findByUserId(userId ?: currentUserId) + } } diff --git a/MykSuite/src/main/java/com/infomaniak/core/myksuite/ui/data/kSuiteMail.kt b/MykSuite/src/main/java/com/infomaniak/core/myksuite/ui/data/kSuiteMail.kt index fc72c841..62583caf 100644 --- a/MykSuite/src/main/java/com/infomaniak/core/myksuite/ui/data/kSuiteMail.kt +++ b/MykSuite/src/main/java/com/infomaniak/core/myksuite/ui/data/kSuiteMail.kt @@ -35,5 +35,6 @@ data class KSuiteMail( @ColumnInfo("used_size") val usedSize: Long, @SerialName("mailbox_id") + @ColumnInfo("mailbox_id") val mailboxId: Int, ) diff --git a/MykSuite/src/main/java/com/infomaniak/core/myksuite/ui/network/ApiRoutes.kt b/MykSuite/src/main/java/com/infomaniak/core/myksuite/ui/network/ApiRoutes.kt index f2881b92..c18dacac 100644 --- a/MykSuite/src/main/java/com/infomaniak/core/myksuite/ui/network/ApiRoutes.kt +++ b/MykSuite/src/main/java/com/infomaniak/core/myksuite/ui/network/ApiRoutes.kt @@ -24,6 +24,5 @@ object ApiRoutes { private const val PREPROD_BASE_URL = "https://api.staging-myksuite.dev.infomaniak.ch" private const val BASE_URL = "https://api.infomaniak.com" - fun myKSuiteData() = "$BASE_URL/1/my_ksuite/current?with=drive,mail,pack,can_trial,has_auto_renew" - + fun myKSuiteData() = "$BASE_URL/1/my_ksuite/current?with=drive,mail" }