Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package world.respect.datalayer.db.school.composite

data class ActorUidEtagAndLastMod(
var actorUid: Long = 0,
var actorEtag: Long = 0,
var actorLct: Long = 0,
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package world.respect.datalayer.db.school.composite

data class StateIdAndLastModified(
var seStateId: String = "",
var seLastMod: Long = 0,
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package world.respect.datalayer.db.school.composite.xapi

import kotlinx.serialization.Serializable

@Serializable
data class SessionTimeAndProgressInfo(
var contextRegistrationHi: Long = 0,
var contextRegistrationLo: Long = 0,
var timeStarted: Long = 0,
var maxProgress: Int? = null,
var maxScore: Float? = null,
var isCompleted: Boolean = false,
var isSuccessful: Boolean? = null,
var resultDuration: Long = 0,
)

object SessionTimeAndProgressInfoConst{
const val SORT_BY_TIMESTAMP_DESC = 1

const val SORT_BY_TIMESTAMP_ASC = 2


const val SORT_BY_SCORE_ASC = 3
const val SORT_BY_SCORE_DESC = 4

const val SORT_BY_COMPLETION_ASC = 5
const val SORT_BY_COMPLETION_DESC = 6

const val SORT_BY_LEAST_RECENT_DESC = 7
const val SORT_BY_LEAST_RECENT_ASC = 8

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package world.respect.datalayer.db.school.composite.xapi

data class StateIdAndLastModified(
var seStateId: String = "",
var seLastMod: Long = 0,
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package world.respect.datalayer.db.school.composite.xapi

import androidx.room.Embedded
import kotlinx.serialization.Serializable
import world.respect.datalayer.db.school.entities.xapi.ActivityEntity
import world.respect.datalayer.db.school.entities.xapi.StatementEntity

@Serializable
data class StatementAndActivity(
@Embedded
var statementEntity: StatementEntity = StatementEntity(),
@Embedded
var activityEntity: ActivityEntity? = null
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package world.respect.datalayer.db.school.composite.xapi

import androidx.room.Embedded
import kotlinx.serialization.Serializable
import world.respect.datalayer.db.school.entities.xapi.ActorEntity
import world.respect.datalayer.db.school.entities.xapi.GroupMemberActorJoin
import world.respect.datalayer.db.school.entities.xapi.StatementEntity

@Serializable
class StatementEntityAndRelated(
@Embedded
var statementEntity: StatementEntity? = null,

@Embedded
var groupMemberActorJoin: GroupMemberActorJoin? = null,

@Embedded
var actorEntity: ActorEntity? = null,
)

Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package world.respect.datalayer.db.school.composite.xapi

import androidx.room.Embedded
import kotlinx.serialization.Serializable
import world.respect.datalayer.db.school.entities.xapi.ActivityEntity
import world.respect.datalayer.db.school.entities.xapi.ActivityLangMapEntry
import world.respect.datalayer.db.school.entities.xapi.StatementEntity
import world.respect.datalayer.db.school.entities.xapi.VerbEntity
import world.respect.datalayer.db.school.entities.xapi.VerbLangMapEntry

@Serializable
class StatementEntityAndVerb(
@Embedded
var statementEntity: StatementEntity = StatementEntity(),
@Embedded
var verb: VerbEntity? = null,
@Embedded
var verbDisplay: VerbLangMapEntry? = null,
@Embedded
var activity: ActivityEntity? = null,
@Embedded
var activityLangMapEntry: ActivityLangMapEntry? = null,

var statementActivityDescription: String? = null,
)

object StatementConst{
const val SORT_BY_TIMESTAMP_DESC = 1

const val SORT_BY_TIMESTAMP_ASC = 2

const val SORT_BY_SCORE_DESC = 3

const val SORT_BY_SCORE_ASC = 4

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package world.respect.datalayer.db.school.composite.xapi

import androidx.room.Embedded
import kotlinx.serialization.Serializable
import world.respect.datalayer.db.school.entities.xapi.VerbEntity
import world.respect.datalayer.db.school.entities.xapi.VerbLangMapEntry

@Serializable
data class VerbEntityAndName(
@Embedded
var verbEntity: VerbEntity = VerbEntity(),
@Embedded
var verbName: VerbLangMapEntry? = null,
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
package world.respect.datalayer.db.school.daos.xapi

import androidx.room.Dao
import androidx.room.Insert
import androidx.room.OnConflictStrategy
import androidx.room.Query
import world.respect.datalayer.db.school.entities.xapi.ActivityEntity

@Dao
interface ActivityEntityDao {

@Insert(onConflict = OnConflictStrategy.IGNORE)
suspend fun insertOrIgnoreAsync(entities: List<ActivityEntity>)

@Query(
"""
UPDATE ActivityEntity
SET actMoreInfo = :actMoreInfo,
actLct = :actLct
WHERE actUid = :activityUid
AND actMoreInfo != :actMoreInfo
"""
)
suspend fun updateIfMoreInfoChanged(
activityUid: Long,
actMoreInfo: String?,
actLct: Long,
)

@Query(
"""
UPDATE ActivityEntity
SET actType = :actType,
actMoreInfo = :actMoreInfo,
actInteractionType = :actInteractionType,
actCorrectResponsePatterns = :actCorrectResponsePatterns,
actLct = :actLct
WHERE actUid = :actUid
AND (SELECT ActivityEntityInternal.actType
FROM ActivityEntity ActivityEntityInternal
WHERE ActivityEntityInternal.actUid = :actUid) IS NULL
AND (SELECT ActivityEntityInternal.actInteractionType
FROM ActivityEntity ActivityEntityInternal
WHERE ActivityEntityInternal.actUid = :actUid) = ${ActivityEntity.TYPE_UNSET}
AND (SELECT ActivityEntityInternal.actCorrectResponsePatterns
FROM ActivityEntity ActivityEntityInternal
WHERE ActivityEntityInternal.actUid = :actUid) IS NULL
"""
)
suspend fun updateIfNotYetDefined(
actUid: Long,
actType: String?,
actMoreInfo: String?,
actInteractionType: Int,
actCorrectResponsePatterns: String?,
actLct: Long,
)

@Query(
"""
SELECT ActivityEntity.*
FROM ActivityEntity
WHERE ActivityEntity.actUid = :activityUid
"""
)
suspend fun findByUidAsync(activityUid: Long): ActivityEntity?
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package world.respect.datalayer.db.school.daos.xapi

import androidx.room.Dao
import androidx.room.Insert
import androidx.room.OnConflictStrategy
import androidx.room.Query
import world.respect.datalayer.db.school.entities.xapi.ActivityExtensionEntity

@Dao
interface ActivityExtensionDao {

@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun upsertListAsync(list: List<ActivityExtensionEntity>)

@Query(
"""
SELECT ActivityExtensionEntity.*
FROM ActivityExtensionEntity
WHERE ActivityExtensionEntity.aeeActivityUid = :activityUid
"""
)
suspend fun findAllByActivityUid(activityUid: Long): List<ActivityExtensionEntity>
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package world.respect.datalayer.db.school.daos.xapi

import androidx.room.Dao
import androidx.room.Insert
import androidx.room.OnConflictStrategy
import androidx.room.Query
import world.respect.datalayer.db.school.entities.xapi.ActivityInteractionEntity

@Dao
interface ActivityInteractionDao {

@Insert(onConflict = OnConflictStrategy.IGNORE)
suspend fun insertOrIgnoreAsync(entities: List<ActivityInteractionEntity>)

@Query(
"""
SELECT DISTINCT ActivityInteractionEntity.aieActivityUid
FROM ActivityInteractionEntity
WHERE ActivityInteractionEntity.aieActivityUid IN (:activityUids)
"""
)
suspend fun findActivityUidsWithInteractionEntitiesAsync(
activityUids: List<Long>
): List<Long>

@Query(
"""
SELECT ActivityInteractionEntity.*
FROM ActivityInteractionEntity
WHERE ActivityInteractionEntity.aieActivityUid = :activityUid
"""
)
suspend fun findAllByActivityUidAsync(
activityUid: Long
): List<ActivityInteractionEntity>


}
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
package world.respect.datalayer.db.school.daos.xapi

import androidx.room.Dao
import androidx.room.Insert
import androidx.room.OnConflictStrategy
import androidx.room.Query
import world.respect.datalayer.db.school.entities.xapi.ActivityLangMapEntry

@Dao
interface ActivityLangMapEntryDao {

@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun upsertList(entities: List<ActivityLangMapEntry>)

/**
* Upsert the lang map entity for an interaction entity if the related interaction entity exists
* The interaction entity might not exists if the Activity is already defined.
*/
@Query(
"""
INSERT OR REPLACE ${ActivityLangMapEntryDaoCommon.INTO_LANG_MAP_WHERE_INTERACTION_ENTITY_EXISTS}
"""
)
suspend fun upsertIfInteractionEntityExists(
almeActivityUid: Long,
almeHash: Long,
almePropName: String?,
almeLangCode: String?,
almeValue: String?,
almeAieHash: Long,
almeLastMod: Long,
)

@Query(
"""
UPDATE ActivityLangMapEntry
SET almeValue = :almeValue,
almeLastMod = :almeLastMod
WHERE almeActivityUid = :almeActivityUid
AND almeHash = :almeHash
AND almeValue != :almeValue
"""
)
suspend fun updateIfChanged(
almeActivityUid: Long,
almeHash: Long,
almeValue: String?,
almeLastMod: Long,
)

@Query(
"""
SELECT ActivityLangMapEntry.*
FROM ActivityLangMapEntry
WHERE ActivityLangMapEntry.almeActivityUid = :activityUid
"""
)
suspend fun findAllByActivityUid(activityUid: Long): List<ActivityLangMapEntry>
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package world.respect.datalayer.db.school.daos.xapi

object ActivityLangMapEntryDaoCommon {

const val INTO_LANG_MAP_WHERE_INTERACTION_ENTITY_EXISTS = """
INTO ActivityLangMapEntry(almeActivityUid, almeHash, almeLangCode, almePropName, almeValue, almeAieHash, almeLastMod)
SELECT :almeActivityUid AS almeActivityUid,
:almeHash AS almeHash,
:almeLangCode AS almeLangCode,
:almePropName AS almePropName,
:almeValue AS almeValue,
:almeAieHash AS almeAieHash,
:almeLastMod AS almeLastMod
WHERE EXISTS(SELECT 1
FROM ActivityInteractionEntity
WHERE ActivityInteractionEntity.aieActivityUid = :almeActivityUid
AND ActivityInteractionEntity.aieHash = :almeAieHash)
"""

}
Loading