refactor: extract core-model into its own module

This commit is contained in:
2026-04-24 18:11:28 +02:00
parent ab7700d202
commit 354314710b
23 changed files with 145 additions and 145 deletions

1
core-model/.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
/build

View File

@@ -0,0 +1,13 @@
plugins {
id("java-library")
alias(libs.plugins.kotlin.jvm)
}
java {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}
kotlin {
compilerOptions {
jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_11
}
}

View File

@@ -0,0 +1,7 @@
package hu.bbara.purefin.model
data class CastMember(
val name: String,
val role: String,
val imageUrl: String?
)

View File

@@ -0,0 +1,20 @@
package hu.bbara.purefin.model
import java.util.UUID
data class Episode(
val id: UUID,
val seriesId: UUID,
val seasonId: UUID,
val index: Int,
val title: String,
val synopsis: String,
val releaseDate: String,
val rating: String,
val runtime: String,
val progress: Double?,
val watched: Boolean,
val format: String,
val imageUrlPrefix: String,
val cast: List<CastMember>
)

View File

@@ -0,0 +1,18 @@
package hu.bbara.purefin.model
import java.util.UUID
data class Library(
val id: UUID,
val name: String,
val type: LibraryKind,
val posterUrl: String,
val series: List<Series>? = null,
val movies: List<Movie>? = null,
) {
init {
require(series != null || movies != null) { "Either series or movie must be provided" }
require(series == null || movies == null) { "Only one of series or movie can be provided" }
require(type == LibraryKind.SERIES || type == LibraryKind.MOVIES) { "Invalid type: $type" }
}
}

View File

@@ -0,0 +1,6 @@
package hu.bbara.purefin.model
enum class LibraryKind {
MOVIES,
SERIES,
}

View File

@@ -0,0 +1,13 @@
package hu.bbara.purefin.model
import java.util.UUID
sealed class Media(
val id: UUID,
val type: MediaKind,
) {
class MovieMedia(val movieId: UUID) : Media(movieId, MediaKind.MOVIE)
class SeriesMedia(val seriesId: UUID) : Media(seriesId, MediaKind.SERIES)
class SeasonMedia(val seasonId: UUID, val seriesId: UUID) : Media(seasonId, MediaKind.SEASON)
class EpisodeMedia(val episodeId: UUID, val seriesId: UUID) : Media(episodeId, MediaKind.EPISODE)
}

View File

@@ -0,0 +1,8 @@
package hu.bbara.purefin.model
enum class MediaKind {
MOVIE,
SERIES,
SEASON,
EPISODE,
}

View File

@@ -0,0 +1,23 @@
package hu.bbara.purefin.model
import java.util.UUID
enum class SegmentType(val value: Int) {
INTRO(0),
OUTRO(1),
MAIN_CONTENT(2),
PREVIEW(3),
RECAP(4);
companion object {
fun fromValue(value: Int): SegmentType? =
entries.firstOrNull { it.value == value }
}
}
data class MediaSegment(
val id: UUID,
val type: SegmentType,
val startMs: Long,
val endMs: Long
)

View File

@@ -0,0 +1,20 @@
package hu.bbara.purefin.model
import java.util.UUID
data class Movie(
val id: UUID,
val libraryId: UUID,
val title: String,
val progress: Double?,
val watched: Boolean,
val year: String,
val rating: String,
val runtime: String,
val format: String,
val synopsis: String,
val imageUrlPrefix: String,
val audioTrack: String,
val subtitles: String,
val cast: List<CastMember>
)

View File

@@ -0,0 +1,13 @@
package hu.bbara.purefin.model
import java.util.UUID
data class Season(
val id: UUID,
val seriesId: UUID,
val name: String,
val index: Int,
val unwatchedEpisodeCount: Int,
val episodeCount: Int,
val episodes: List<Episode>
)

View File

@@ -0,0 +1,16 @@
package hu.bbara.purefin.model
import java.util.UUID
data class Series(
val id: UUID,
val libraryId: UUID,
val name: String,
val synopsis: String,
val year: String,
val imageUrlPrefix: String,
val unwatchedEpisodeCount: Int,
val seasonCount: Int,
val seasons: List<Season>,
val cast: List<CastMember>
)