feat(domain): extended and actualized domain models
This commit is contained in:
@@ -6,4 +6,21 @@ data class Film(
|
||||
val id: UUID,
|
||||
val title: 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
|
||||
|
||||
import java.time.LocalDateTime
|
||||
import java.util.UUID
|
||||
|
||||
data class FilmLibrary(
|
||||
@@ -8,4 +9,5 @@ data class FilmLibrary(
|
||||
val filmId: UUID,
|
||||
val comment: String?,
|
||||
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 email: String,
|
||||
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