Database-level multi-library support #48 (#58)

* feat: start of library backends

* feat: update backend routes and create initializer

* feat: add legacy library creation

* fix: resolve frontend type errors

* fix: runtime errors

* fix: lint
This commit is contained in:
DecDuck
2025-06-01 16:05:05 +10:00
committed by GitHub
parent 490afd0bb7
commit 3e5c3678d5
21 changed files with 664 additions and 298 deletions
+15 -1
View File
@@ -1,7 +1,7 @@
model ApplicationSettings {
timestamp DateTime @id @default(now())
metadataProviders String[]
metadataProviders String[]
saveSlotCountLimit Int @default(5)
saveSlotSizeLimit Float @default(10) // MB
@@ -13,3 +13,17 @@ enum Platform {
Linux @map("linux")
macOS @map("macos")
}
enum LibraryBackend {
Filesystem
}
model Library {
id String @id @default(uuid())
name String
backend LibraryBackend
options Json
games Game[]
}
+8 -2
View File
@@ -29,8 +29,13 @@ model Game {
mImageCarouselObjectIds String[] // linked to below array
mImageLibraryObjectIds String[] // linked to objects in s3
versions GameVersion[]
libraryBasePath String @unique // Base dir for all the game versions
versions GameVersion[]
// These fields will not be optional in the next version
// Any game without a library ID will be assigned one at startup, based on the defaults
libraryId String?
library Library? @relation(fields: [libraryId], references: [id])
libraryPath String
collections CollectionEntry[]
saves SaveSlot[]
@@ -42,6 +47,7 @@ model Game {
publishers Company[] @relation(name: "publishers")
@@unique([metadataSource, metadataId], name: "metadataKey")
@@unique([libraryId, libraryPath], name: "libraryKey")
}
model GameRating {