mirror of
https://github.com/BrenBroZAYT/gameyfin.git
synced 2026-06-13 16:40:01 +00:00
First version of metadata on field level, probably not the final implementation
This commit is contained in:
@@ -2,6 +2,7 @@ package de.grimsi.gameyfin.games
|
||||
|
||||
import de.grimsi.gameyfin.core.plugins.management.PluginManagementService
|
||||
import de.grimsi.gameyfin.games.dto.GameDto
|
||||
import de.grimsi.gameyfin.games.dto.GameMetadataDto
|
||||
import de.grimsi.gameyfin.games.entities.*
|
||||
import de.grimsi.gameyfin.games.repositories.CompanyRepository
|
||||
import de.grimsi.gameyfin.games.repositories.GameRepository
|
||||
@@ -102,11 +103,24 @@ class GameService(
|
||||
perspectives = game.perspectives.map { it.name },
|
||||
imageIds = game.images.mapNotNull { it.id },
|
||||
videoUrls = game.videoUrls.map { it.toString() },
|
||||
source = game.source.pluginId
|
||||
metadata = toDto(game.metadata)
|
||||
)
|
||||
}
|
||||
|
||||
private fun toDto(metadata: Map<String, FieldMetadata>): Map<String, GameMetadataDto> {
|
||||
return metadata.mapValues { toDto(it.value) }
|
||||
}
|
||||
|
||||
private fun toDto(metadata: FieldMetadata): GameMetadataDto {
|
||||
return GameMetadataDto(
|
||||
source = metadata.source.pluginId,
|
||||
lastUpdated = metadata.lastUpdated
|
||||
)
|
||||
}
|
||||
|
||||
private fun toEntity(metadata: GameMetadata, path: Path, source: GameMetadataProvider): Game {
|
||||
val sourcePlugin = pluginManagementService.getPluginManagementEntry(source.javaClass)
|
||||
|
||||
return Game(
|
||||
title = metadata.title,
|
||||
summary = metadata.description,
|
||||
@@ -122,7 +136,7 @@ class GameService(
|
||||
images = metadata.screenshotUrls.map { downloadAndPersist(it, ImageType.SCREENSHOT) }.toSet(),
|
||||
videoUrls = metadata.videoUrls,
|
||||
path = path.toString(),
|
||||
source = pluginManagementService.getPluginManagementEntry(source.javaClass)
|
||||
metadata = mapOf("title" to FieldMetadata(sourcePlugin))
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -18,5 +18,5 @@ class GameDto(
|
||||
val perspectives: List<String>?,
|
||||
val imageIds: List<Long>?,
|
||||
val videoUrls: List<String>?,
|
||||
val source: String?
|
||||
val metadata: Map<String, GameMetadataDto>
|
||||
)
|
||||
@@ -0,0 +1,8 @@
|
||||
package de.grimsi.gameyfin.games.dto
|
||||
|
||||
import java.time.Instant
|
||||
|
||||
class GameMetadataDto(
|
||||
val source: String,
|
||||
val lastUpdated: Instant
|
||||
)
|
||||
@@ -0,0 +1,19 @@
|
||||
package de.grimsi.gameyfin.games.entities
|
||||
|
||||
import de.grimsi.gameyfin.core.plugins.management.PluginManagementEntry
|
||||
import jakarta.persistence.*
|
||||
import java.time.Instant
|
||||
|
||||
@Entity
|
||||
class FieldMetadata(
|
||||
@Id
|
||||
@GeneratedValue(strategy = GenerationType.AUTO)
|
||||
var id: Long? = null,
|
||||
|
||||
@ManyToOne
|
||||
val source: PluginManagementEntry,
|
||||
|
||||
val lastUpdated: Instant
|
||||
) {
|
||||
constructor(source: PluginManagementEntry) : this(null, source, Instant.now())
|
||||
}
|
||||
@@ -1,6 +1,5 @@
|
||||
package de.grimsi.gameyfin.games.entities
|
||||
|
||||
import de.grimsi.gameyfin.core.plugins.management.PluginManagementEntry
|
||||
import de.grimsi.gameyfin.pluginapi.gamemetadata.GameFeature
|
||||
import de.grimsi.gameyfin.pluginapi.gamemetadata.Genre
|
||||
import de.grimsi.gameyfin.pluginapi.gamemetadata.PlayerPerspective
|
||||
@@ -60,6 +59,6 @@ class Game(
|
||||
@Column(unique = true)
|
||||
val path: String,
|
||||
|
||||
@ManyToOne
|
||||
val source: PluginManagementEntry
|
||||
@OneToMany(cascade = [CascadeType.ALL], orphanRemoval = true)
|
||||
val metadata: Map<String, FieldMetadata>
|
||||
)
|
||||
+6
@@ -0,0 +1,6 @@
|
||||
package de.grimsi.gameyfin.games.repositories
|
||||
|
||||
import de.grimsi.gameyfin.games.entities.FieldMetadata
|
||||
import org.springframework.data.jpa.repository.JpaRepository
|
||||
|
||||
interface FieldMetadataRepository : JpaRepository<FieldMetadata, Long>
|
||||
@@ -0,0 +1,2 @@
|
||||
logging.level.org.hibernate.SQL: DEBUG
|
||||
logging.level.org.hibernate.type: TRACE
|
||||
Reference in New Issue
Block a user