Coverage Summary for Class: MoneySurferDatabase (com.georgeci.moneysurfer.data.db)
| Class |
Class, %
|
Method, %
|
Branch, %
|
Line, %
|
Instruction, %
|
| MoneySurferDatabase |
100%
(1/1)
|
100%
(1/1)
|
|
100%
(1/1)
|
100%
(2/2)
|
package com.georgeci.moneysurfer.data.db
import androidx.room.ConstructedBy
import androidx.room.Database
import androidx.room.RoomDatabase
import androidx.room.RoomDatabaseConstructor
import com.georgeci.moneysurfer.data.db.dao.AccountDao
import com.georgeci.moneysurfer.data.db.dao.BudgetDao
import com.georgeci.moneysurfer.data.db.dao.CategoryDao
import com.georgeci.moneysurfer.data.db.dao.ConfigEntryDao
import com.georgeci.moneysurfer.data.db.dao.ExchangeRateDao
import com.georgeci.moneysurfer.data.db.dao.GoalContributionDao
import com.georgeci.moneysurfer.data.db.dao.GoalDao
import com.georgeci.moneysurfer.data.db.dao.RecurringRuleDao
import com.georgeci.moneysurfer.data.db.dao.TransactionDao
import com.georgeci.moneysurfer.data.db.dao.UserDao
import com.georgeci.moneysurfer.data.db.dao.WorkspaceDao
import com.georgeci.moneysurfer.data.db.dao.WorkspaceInviteDao
import com.georgeci.moneysurfer.data.db.dao.WorkspaceMemberDao
import com.georgeci.moneysurfer.data.db.entity.AccountEntity
import com.georgeci.moneysurfer.data.db.entity.BudgetEntity
import com.georgeci.moneysurfer.data.db.entity.CategoryEntity
import com.georgeci.moneysurfer.data.db.entity.ConfigEntryEntity
import com.georgeci.moneysurfer.data.db.entity.ExchangeRateEntity
import com.georgeci.moneysurfer.data.db.entity.GoalContributionEntity
import com.georgeci.moneysurfer.data.db.entity.GoalEntity
import com.georgeci.moneysurfer.data.db.entity.RecurringRuleEntity
import com.georgeci.moneysurfer.data.db.entity.TransactionEntity
import com.georgeci.moneysurfer.data.db.entity.TransactionFtsEntity
import com.georgeci.moneysurfer.data.db.entity.UserEntity
import com.georgeci.moneysurfer.data.db.entity.WorkspaceEntity
import com.georgeci.moneysurfer.data.db.entity.WorkspaceInviteEntity
import com.georgeci.moneysurfer.data.db.entity.WorkspaceMemberEntity
/**
* Schema version of [MoneySurferDatabase]. Single source of truth so the
* Room annotation, the backup manifest, and tests can never drift.
*/
const val MONEY_SURFER_DB_VERSION: Int = 36
/**
* The oldest schema version a released build must be able to upgrade *from*. Nothing below this
* number can exist on a user's device, so those paths may stay unimplemented; every version *at
* or above* it must be reachable by a hand-written [androidx.room.migration.Migration] chain, and
* the `verifyRoomMigrations` Gradle task fails the build when a newly exported schema arrives
* without one. See `docs/architecture/persistence.md` → "Room schema versioning".
*
* **The first release has not shipped yet, so this number is still provisional.** Until it does,
* no database exists outside a developer machine and the baseline may legitimately move up with
* [MONEY_SURFER_DB_VERSION] — a pre-release schema change can raise it instead of adding a
* migration. The moment the first build reaches users this becomes a historical marker and must
* never be raised again: raising it then would excuse exactly the migrations that real installs
* depend on. Whoever cuts that release freezes this constant as part of it.
*/
const val MONEY_SURFER_DB_RELEASE_BASELINE_VERSION: Int = 36
@Database(
entities = [
UserEntity::class,
WorkspaceEntity::class,
WorkspaceMemberEntity::class,
WorkspaceInviteEntity::class,
AccountEntity::class,
CategoryEntity::class,
TransactionEntity::class,
TransactionFtsEntity::class,
BudgetEntity::class,
RecurringRuleEntity::class,
GoalEntity::class,
GoalContributionEntity::class,
ExchangeRateEntity::class,
ConfigEntryEntity::class,
],
version = MONEY_SURFER_DB_VERSION,
)
@ConstructedBy(MoneySurferDatabaseConstructor::class)
abstract class MoneySurferDatabase : RoomDatabase() {
abstract fun userDao(): UserDao
abstract fun workspaceDao(): WorkspaceDao
abstract fun workspaceMemberDao(): WorkspaceMemberDao
abstract fun workspaceInviteDao(): WorkspaceInviteDao
abstract fun accountDao(): AccountDao
abstract fun categoryDao(): CategoryDao
abstract fun transactionDao(): TransactionDao
abstract fun budgetDao(): BudgetDao
abstract fun recurringRuleDao(): RecurringRuleDao
abstract fun goalDao(): GoalDao
abstract fun goalContributionDao(): GoalContributionDao
abstract fun exchangeRateDao(): ExchangeRateDao
abstract fun configEntryDao(): ConfigEntryDao
}
@Suppress("KotlinNoActualForExpect")
expect object MoneySurferDatabaseConstructor : RoomDatabaseConstructor<MoneySurferDatabase> {
override fun initialize(): MoneySurferDatabase
}