feat(domain): extended and actualized domain models

This commit is contained in:
ITQ
2026-05-20 02:57:46 +03:00
parent 8e89fe5f7f
commit 432659500b
7 changed files with 83 additions and 0 deletions
@@ -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(),
)