chore(docs): completar Fase 2 — requisitos y arquitectura
- Añade/actualiza `docs/requirements.md`, `docs/architecture.md`, `docs/api-integration.md`, `docs/data-model.md` - Documenta criterios de aceptación y decisiones técnico-arquitectónicas - Recomendación: añadir `docs/legal-considerations.md` (pendiente)
This commit is contained in:
105
backend/prisma/schema.prisma
Normal file
105
backend/prisma/schema.prisma
Normal file
@@ -0,0 +1,105 @@
|
||||
datasource db {
|
||||
provider = "sqlite"
|
||||
url = env("DATABASE_URL")
|
||||
}
|
||||
|
||||
generator client {
|
||||
provider = "prisma-client-js"
|
||||
}
|
||||
|
||||
model Game {
|
||||
id String @id @default(cuid())
|
||||
title String
|
||||
slug String @unique
|
||||
description String?
|
||||
releaseDate DateTime?
|
||||
igdbId Int? @unique
|
||||
rawgId Int? @unique
|
||||
thegamesdbId Int? @unique
|
||||
extra String? // JSON serialized (usar parse/stringify al guardar/leer) para compatibilidad con SQLite
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
romFiles RomFile[]
|
||||
artworks Artwork[]
|
||||
purchases Purchase[]
|
||||
gamePlatforms GamePlatform[]
|
||||
priceHistories PriceHistory[]
|
||||
tags Tag[]
|
||||
@@index([title])
|
||||
}
|
||||
|
||||
model Platform {
|
||||
id String @id @default(cuid())
|
||||
name String
|
||||
slug String @unique
|
||||
generation Int?
|
||||
gamePlatforms GamePlatform[]
|
||||
}
|
||||
|
||||
model GamePlatform {
|
||||
id String @id @default(cuid())
|
||||
game Game @relation(fields: [gameId], references: [id])
|
||||
gameId String
|
||||
platform Platform @relation(fields: [platformId], references: [id])
|
||||
platformId String
|
||||
@@unique([gameId, platformId])
|
||||
}
|
||||
|
||||
model RomFile {
|
||||
id String @id @default(cuid())
|
||||
path String
|
||||
filename String
|
||||
checksum String @unique
|
||||
size Int
|
||||
format String
|
||||
hashes String? // JSON serialized (ej.: {"crc32": "...", "md5": "..."})
|
||||
game Game? @relation(fields: [gameId], references: [id])
|
||||
gameId String?
|
||||
addedAt DateTime @default(now())
|
||||
lastSeenAt DateTime?
|
||||
status String @default("active")
|
||||
@@index([checksum])
|
||||
}
|
||||
|
||||
model Artwork {
|
||||
id String @id @default(cuid())
|
||||
game Game @relation(fields: [gameId], references: [id])
|
||||
gameId String
|
||||
type String
|
||||
sourceUrl String
|
||||
localPath String?
|
||||
width Int?
|
||||
height Int?
|
||||
fetchedAt DateTime @default(now())
|
||||
}
|
||||
|
||||
model Purchase {
|
||||
id String @id @default(cuid())
|
||||
game Game @relation(fields: [gameId], references: [id])
|
||||
gameId String
|
||||
priceCents Int
|
||||
currency String
|
||||
store String?
|
||||
date DateTime
|
||||
receiptPath String?
|
||||
}
|
||||
|
||||
model Tag {
|
||||
id String @id @default(cuid())
|
||||
name String @unique
|
||||
games Game[]
|
||||
}
|
||||
|
||||
model PriceHistory {
|
||||
id String @id @default(cuid())
|
||||
game Game @relation(fields: [gameId], references: [id])
|
||||
gameId String
|
||||
priceCents Int
|
||||
currency String
|
||||
recordedAt DateTime @default(now())
|
||||
source String?
|
||||
}
|
||||
|
||||
// Metadatos:
|
||||
// Autor: GitHub Copilot
|
||||
// Última actualización: 2026-02-07
|
||||
Reference in New Issue
Block a user