feat(domain): extended and actualized domain models
This commit is contained in:
@@ -6,4 +6,21 @@ data class Film(
|
|||||||
val id: UUID,
|
val id: UUID,
|
||||||
val title: String,
|
val title: String,
|
||||||
val description: String,
|
val description: String,
|
||||||
|
val contentType: ContentType = ContentType.FILM,
|
||||||
|
val releaseYear: Int? = null,
|
||||||
|
val genres: List<String> = emptyList(),
|
||||||
|
val cast: List<String> = emptyList(),
|
||||||
|
val directors: List<String> = emptyList(),
|
||||||
|
val imdbRating: Double? = null,
|
||||||
|
val platformRating: Double? = null,
|
||||||
|
val externalUrl: String? = null,
|
||||||
|
val jellyfinItemId: String? = null,
|
||||||
|
val jellyfinLibraryId: String? = null,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
enum class ContentType {
|
||||||
|
FILM,
|
||||||
|
SERIES,
|
||||||
|
EPISODE,
|
||||||
|
OTHER,
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package com.project.movienight.domain.model
|
package com.project.movienight.domain.model
|
||||||
|
|
||||||
|
import java.time.LocalDateTime
|
||||||
import java.util.UUID
|
import java.util.UUID
|
||||||
|
|
||||||
data class FilmLibrary(
|
data class FilmLibrary(
|
||||||
@@ -8,4 +9,5 @@ data class FilmLibrary(
|
|||||||
val filmId: UUID,
|
val filmId: UUID,
|
||||||
val comment: String?,
|
val comment: String?,
|
||||||
val isViewed: Boolean,
|
val isViewed: Boolean,
|
||||||
|
val watchedAt: LocalDateTime? = null,
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -0,0 +1,14 @@
|
|||||||
|
package com.project.movienight.domain.model
|
||||||
|
|
||||||
|
import java.time.LocalDateTime
|
||||||
|
import java.util.UUID
|
||||||
|
|
||||||
|
data class FilmRating(
|
||||||
|
val id: UUID,
|
||||||
|
val userId: UUID,
|
||||||
|
val filmId: UUID,
|
||||||
|
val score: Int,
|
||||||
|
val note: String? = null,
|
||||||
|
val createdAt: LocalDateTime = LocalDateTime.now(),
|
||||||
|
val updatedAt: LocalDateTime = createdAt,
|
||||||
|
)
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
package com.project.movienight.domain.model
|
||||||
|
|
||||||
|
import java.time.LocalDateTime
|
||||||
|
import java.util.UUID
|
||||||
|
|
||||||
|
data class JellyfinSyncState(
|
||||||
|
val userId: UUID,
|
||||||
|
val lastSyncedAt: LocalDateTime? = null,
|
||||||
|
val lastSuccessfulSyncAt: LocalDateTime? = null,
|
||||||
|
val lastError: String? = null,
|
||||||
|
val syncedItemCount: Int = 0,
|
||||||
|
)
|
||||||
|
|
||||||
|
data class JellyfinSyncSummary(
|
||||||
|
val syncedUsers: Int,
|
||||||
|
val skippedUsers: Int,
|
||||||
|
val syncedItems: Int,
|
||||||
|
val durationMs: Long,
|
||||||
|
)
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
package com.project.movienight.domain.model
|
||||||
|
|
||||||
|
import java.util.UUID
|
||||||
|
|
||||||
|
data class RecommendationContext(
|
||||||
|
val userId: UUID,
|
||||||
|
val contentType: ContentType? = null,
|
||||||
|
val mood: String? = null,
|
||||||
|
val limit: Int = 10,
|
||||||
|
)
|
||||||
|
|
||||||
|
data class RecommendationResult(
|
||||||
|
val film: Film,
|
||||||
|
val score: Double,
|
||||||
|
val reasons: List<String>,
|
||||||
|
)
|
||||||
@@ -7,4 +7,6 @@ data class User(
|
|||||||
val name: String,
|
val name: String,
|
||||||
val email: String,
|
val email: String,
|
||||||
val library: FilmLibrary?,
|
val library: FilmLibrary?,
|
||||||
|
val preferences: UserPreferences? = null,
|
||||||
|
val jellyfinUserId: String? = null,
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -0,0 +1,13 @@
|
|||||||
|
package com.project.movienight.domain.model
|
||||||
|
|
||||||
|
import java.util.UUID
|
||||||
|
|
||||||
|
data class UserPreferences(
|
||||||
|
val userId: UUID,
|
||||||
|
val weightedGenres: Map<String, Int> = emptyMap(),
|
||||||
|
val plotTypes: List<String> = emptyList(),
|
||||||
|
val eras: List<String> = emptyList(),
|
||||||
|
val castAndDirectors: List<String> = emptyList(),
|
||||||
|
val moods: List<String> = emptyList(),
|
||||||
|
val contentTypes: List<ContentType> = emptyList(),
|
||||||
|
)
|
||||||
Reference in New Issue
Block a user