Put Pit Log under version control so the app and sync server can live on git.

This commit is contained in:
RallyBlock committed 2026-10-22 13:50:38 -07:00
commit 1030bac79e
79 files changed
+8463

No files matched your search

@@ -0,0 +1,143 @@
package com.racingapp.pitlog.data
import androidx.room.Dao
import androidx.room.Insert
import androidx.room.Query
import androidx.room.Transaction
import androidx.room.Update
import kotlinx.coroutines.flow.Flow
@Dao
interface RaceDao {
@Transaction
@Query("SELECT * FROM race_nights WHERE deleted = 0 AND carId = :carId ORDER BY dateEpochDay DESC, id DESC")
fun observeNightsWithRuns(carId: Long): Flow<List<NightWithRuns>>
@Query("SELECT * FROM race_nights WHERE id = :id AND deleted = 0")
fun observeNight(id: Long): Flow<RaceNight?>
@Query("SELECT * FROM race_nights WHERE id = :id AND deleted = 0")
suspend fun getNight(id: Long): RaceNight?
@Query("SELECT * FROM race_nights WHERE id = :id")
suspend fun nightById(id: Long): RaceNight?
@Query("SELECT * FROM race_nights WHERE syncId = :syncId AND carId = :carId LIMIT 1")
suspend fun nightBySyncId(syncId: String, carId: Long): RaceNight?
@Query("SELECT * FROM race_nights WHERE pending = 1 AND carId = :carId")
suspend fun pendingNights(carId: Long): List<RaceNight>
@Query("SELECT * FROM race_nights WHERE syncId = '' AND carId = :carId")
suspend fun nightsMissingSyncId(carId: Long): List<RaceNight>
@Query(
"""
SELECT trackName FROM race_nights
WHERE deleted = 0 AND carId = :carId AND TRIM(trackName) != ''
GROUP BY trackName COLLATE NOCASE
ORDER BY MAX(dateEpochDay) DESC, trackName COLLATE NOCASE
""",
)
fun observeTrackNames(carId: Long): Flow<List<String>>
@Insert
suspend fun insertNight(night: RaceNight): Long
@Update
suspend fun updateNight(night: RaceNight)
@Query("SELECT * FROM runs WHERE nightId = :nightId AND deleted = 0 ORDER BY recordedAt DESC")
fun observeRuns(nightId: Long): Flow<List<RunLog>>
@Query("SELECT * FROM runs WHERE nightId = :nightId")
suspend fun runsForNight(nightId: Long): List<RunLog>
@Query("SELECT * FROM runs WHERE id = :id AND deleted = 0")
fun observeRun(id: Long): Flow<RunLog?>
@Query("SELECT * FROM runs WHERE id = :id AND deleted = 0")
suspend fun getRun(id: Long): RunLog?
@Query("SELECT * FROM runs WHERE id = :id")
suspend fun runById(id: Long): RunLog?
@Query("SELECT * FROM runs WHERE syncId = :syncId LIMIT 1")
suspend fun runBySyncId(syncId: String): RunLog?
@Query(
"""
SELECT * FROM runs
WHERE pending = 1 AND nightId IN (SELECT id FROM race_nights WHERE carId = :carId)
""",
)
suspend fun pendingRuns(carId: Long): List<RunLog>
@Query(
"""
SELECT * FROM runs
WHERE (syncId = '' OR nightSyncId = '')
AND nightId IN (SELECT id FROM race_nights WHERE carId = :carId)
""",
)
suspend fun runsMissingSyncId(carId: Long): List<RunLog>
@Query("SELECT * FROM runs WHERE nightId = :nightId AND deleted = 0 ORDER BY recordedAt DESC LIMIT 1")
suspend fun latestRun(nightId: Long): RunLog?
@Query(
"SELECT * FROM runs WHERE nightId = :nightId AND deleted = 0 AND recordedAt < :before ORDER BY recordedAt DESC LIMIT 1",
)
suspend fun previousRun(nightId: Long, before: Long): RunLog?
@Insert
suspend fun insertRun(run: RunLog): Long
@Update
suspend fun updateRun(run: RunLog)
@Query("SELECT * FROM setup_sheets WHERE deleted = 0 AND carId = :carId ORDER BY recordedAt ASC, id ASC")
fun observeSetupSheets(carId: Long): Flow<List<SetupSheet>>
@Query("SELECT * FROM setup_sheets WHERE id = :id")
suspend fun sheetById(id: Long): SetupSheet?
@Query("SELECT * FROM setup_sheets WHERE syncId = :syncId AND carId = :carId LIMIT 1")
suspend fun sheetBySyncId(syncId: String, carId: Long): SetupSheet?
@Query("SELECT * FROM setup_sheets WHERE pending = 1 AND carId = :carId")
suspend fun pendingSheets(carId: Long): List<SetupSheet>
@Query("SELECT * FROM setup_sheets WHERE syncId = '' AND carId = :carId")
suspend fun sheetsMissingSyncId(carId: Long): List<SetupSheet>
@Insert
suspend fun insertSetupSheet(sheet: SetupSheet): Long
@Update
suspend fun updateSetupSheet(sheet: SetupSheet)
@Query("SELECT * FROM cars WHERE deleted = 0 ORDER BY id ASC")
fun observeCars(): Flow<List<Car>>
@Query("SELECT * FROM cars ORDER BY id ASC")
suspend fun everyCar(): List<Car>
@Query("SELECT * FROM cars WHERE deleted = 0 ORDER BY id ASC")
suspend fun activeCars(): List<Car>
@Query("SELECT * FROM cars WHERE id = :id")
fun observeCar(id: Long): Flow<Car?>
@Query("SELECT * FROM cars WHERE id = :id")
suspend fun carById(id: Long): Car?
@Query("SELECT * FROM cars WHERE token = :token LIMIT 1")
suspend fun carByToken(token: String): Car?
@Insert
suspend fun insertCar(car: Car): Long
@Update
suspend fun updateCar(car: Car)
}