You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

83 lines
2.3 KiB
Kotlin

package moe.odango.index.entity
import io.requery.*
import moe.odango.index.utils.EntityHelper
import moe.odango.index.utils.InfoSource
import moe.odango.index.utils.helper
import java.util.*
@Entity
interface AnimeRelation : Persistable {
@get:Key
val id: UUID
@get:ManyToOne
@get:ForeignKey
@get:Column(name = "anime_from")
val from: Anime
@get:ManyToOne
@get:ForeignKey
@get:Column(name = "anime_to")
val to: Anime
var relation: RelationType
val source: InfoSource
companion object : EntityHelper<AnimeRelationEntity> by helper(::AnimeRelationEntity, {
setId(UUID.randomUUID())
})
enum class RelationType {
Prequel,
Sequel,
SideStory,
FullStory,
ParentStory,
Summary,
SpinOff,
AlternateVersion,
AlternateSetting,
SameSetting,
Other,
Character;
val inverse: RelationType
get() {
return when (this) {
Prequel -> Sequel
Sequel -> Prequel
Summary -> FullStory
FullStory -> Summary
SideStory -> ParentStory
SpinOff -> ParentStory
ParentStory -> SideStory
AlternateSetting -> AlternateSetting
AlternateVersion -> AlternateVersion
SameSetting -> SameSetting
Other -> Other
Character -> Character
}
}
companion object {
fun fromString(type: String): RelationType {
return when (type.toLowerCase()) {
"alternate setting" -> AlternateSetting
"alternate version" -> AlternateVersion
"prequel" -> Prequel
"sequel" -> Sequel
"spin off" -> SpinOff
"summary" -> Summary
"side story" -> SideStory
"full story" -> FullStory
"parent story" -> ParentStory
"character" -> Character
"same setting" -> SameSetting
else -> Other
}
}
}
}
}