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 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 } } } } }