206 lines
6.7 KiB
Plaintext
206 lines
6.7 KiB
Plaintext
generator client {
|
|
provider = "prisma-client-js"
|
|
}
|
|
|
|
datasource db {
|
|
provider = "postgresql"
|
|
url = env("DATABASE_URL")
|
|
}
|
|
|
|
model Project {
|
|
id Int @id @default(autoincrement())
|
|
slug String @unique @db.VarChar(255)
|
|
defaultLocale String @default("en") @db.VarChar(10)
|
|
title String @db.VarChar(255)
|
|
description String
|
|
content String
|
|
tags String[] @default([])
|
|
featured Boolean @default(false)
|
|
category String @db.VarChar(100)
|
|
date String @db.VarChar(10)
|
|
github String? @db.VarChar(500)
|
|
live String? @db.VarChar(500)
|
|
published Boolean @default(true)
|
|
imageUrl String? @db.VarChar(500)
|
|
metaDescription String?
|
|
keywords String?
|
|
ogImage String? @db.VarChar(500)
|
|
schema Json?
|
|
difficulty Difficulty @default(INTERMEDIATE)
|
|
timeToComplete String? @db.VarChar(100)
|
|
technologies String[] @default([])
|
|
challenges String[] @default([])
|
|
lessonsLearned String[] @default([])
|
|
futureImprovements String[] @default([])
|
|
demoVideo String? @db.VarChar(500)
|
|
screenshots String[] @default([])
|
|
colorScheme String @default("Dark") @db.VarChar(100)
|
|
accessibility Boolean @default(true)
|
|
performance Json @default("{\"loadTime\": \"1.5s\", \"bundleSize\": \"50KB\", \"lighthouse\": 90}")
|
|
analytics Json @default("{\"likes\": 0, \"views\": 0, \"shares\": 0}")
|
|
createdAt DateTime @default(now()) @map("created_at")
|
|
updatedAt DateTime @updatedAt @map("updated_at")
|
|
|
|
translations ProjectTranslation[]
|
|
|
|
@@index([category])
|
|
@@index([featured])
|
|
@@index([published])
|
|
@@index([difficulty])
|
|
@@index([createdAt])
|
|
@@index([tags])
|
|
}
|
|
|
|
model ProjectTranslation {
|
|
id Int @id @default(autoincrement())
|
|
projectId Int @map("project_id")
|
|
locale String @db.VarChar(10)
|
|
title String @db.VarChar(255)
|
|
description String
|
|
content Json?
|
|
metaDescription String?
|
|
keywords String?
|
|
ogImage String? @db.VarChar(500)
|
|
schema Json?
|
|
createdAt DateTime @default(now()) @map("created_at")
|
|
updatedAt DateTime @updatedAt @map("updated_at")
|
|
|
|
project Project @relation(fields: [projectId], references: [id], onDelete: Cascade)
|
|
|
|
@@unique([projectId, locale])
|
|
@@index([locale])
|
|
@@index([projectId])
|
|
@@map("project_translations")
|
|
}
|
|
|
|
model ContentPage {
|
|
id Int @id @default(autoincrement())
|
|
key String @unique @db.VarChar(100)
|
|
status ContentStatus @default(PUBLISHED)
|
|
createdAt DateTime @default(now()) @map("created_at")
|
|
updatedAt DateTime @updatedAt @map("updated_at")
|
|
|
|
translations ContentPageTranslation[]
|
|
|
|
@@map("content_pages")
|
|
}
|
|
|
|
model ContentPageTranslation {
|
|
id Int @id @default(autoincrement())
|
|
pageId Int @map("page_id")
|
|
locale String @db.VarChar(10)
|
|
title String?
|
|
slug String? @db.VarChar(255)
|
|
content Json
|
|
metaDescription String?
|
|
keywords String?
|
|
updatedAt DateTime @updatedAt @map("updated_at")
|
|
createdAt DateTime @default(now()) @map("created_at")
|
|
|
|
page ContentPage @relation(fields: [pageId], references: [id], onDelete: Cascade)
|
|
|
|
@@unique([pageId, locale])
|
|
@@index([locale])
|
|
@@index([slug])
|
|
@@map("content_page_translations")
|
|
}
|
|
|
|
model SiteSettings {
|
|
id Int @id @default(1)
|
|
defaultLocale String @default("en") @db.VarChar(10)
|
|
locales String[] @default(["en","de"])
|
|
theme Json?
|
|
updatedAt DateTime @updatedAt @map("updated_at")
|
|
|
|
@@map("site_settings")
|
|
}
|
|
|
|
enum ContentStatus {
|
|
DRAFT
|
|
PUBLISHED
|
|
}
|
|
|
|
model PageView {
|
|
id Int @id @default(autoincrement())
|
|
projectId Int? @map("project_id")
|
|
page String @db.VarChar(100)
|
|
ip String? @db.VarChar(45)
|
|
userAgent String? @map("user_agent")
|
|
referrer String? @db.VarChar(500)
|
|
timestamp DateTime @default(now())
|
|
|
|
@@index([projectId])
|
|
@@index([timestamp])
|
|
@@index([page])
|
|
}
|
|
|
|
model UserInteraction {
|
|
id Int @id @default(autoincrement())
|
|
projectId Int @map("project_id")
|
|
type InteractionType
|
|
ip String? @db.VarChar(45)
|
|
userAgent String? @map("user_agent")
|
|
timestamp DateTime @default(now())
|
|
|
|
@@index([projectId])
|
|
@@index([type])
|
|
@@index([timestamp])
|
|
}
|
|
|
|
model Contact {
|
|
id Int @id @default(autoincrement())
|
|
name String @db.VarChar(255)
|
|
email String @db.VarChar(255)
|
|
subject String @db.VarChar(500)
|
|
message String
|
|
responded Boolean @default(false)
|
|
responseTemplate String? @map("response_template") @db.VarChar(50)
|
|
createdAt DateTime @default(now()) @map("created_at")
|
|
updatedAt DateTime @updatedAt @map("updated_at")
|
|
|
|
@@index([email])
|
|
@@index([responded])
|
|
@@index([createdAt])
|
|
}
|
|
|
|
enum Difficulty {
|
|
BEGINNER
|
|
INTERMEDIATE
|
|
ADVANCED
|
|
EXPERT
|
|
}
|
|
|
|
enum InteractionType {
|
|
LIKE
|
|
SHARE
|
|
BOOKMARK
|
|
COMMENT
|
|
}
|
|
|
|
model ActivityStatus {
|
|
id Int @id @default(1)
|
|
activityType String? @map("activity_type") @db.VarChar(50)
|
|
activityDetails String? @map("activity_details") @db.VarChar(255)
|
|
activityProject String? @map("activity_project") @db.VarChar(255)
|
|
activityLanguage String? @map("activity_language") @db.VarChar(50)
|
|
activityRepo String? @map("activity_repo") @db.VarChar(500)
|
|
musicPlaying Boolean @default(false) @map("music_playing")
|
|
musicTrack String? @map("music_track") @db.VarChar(255)
|
|
musicArtist String? @map("music_artist") @db.VarChar(255)
|
|
musicAlbum String? @map("music_album") @db.VarChar(255)
|
|
musicPlatform String? @map("music_platform") @db.VarChar(50)
|
|
musicProgress Int? @map("music_progress")
|
|
musicAlbumArt String? @map("music_album_art") @db.VarChar(500)
|
|
watchingTitle String? @map("watching_title") @db.VarChar(255)
|
|
watchingPlatform String? @map("watching_platform") @db.VarChar(50)
|
|
watchingType String? @map("watching_type") @db.VarChar(50)
|
|
gamingGame String? @map("gaming_game") @db.VarChar(255)
|
|
gamingPlatform String? @map("gaming_platform") @db.VarChar(50)
|
|
gamingStatus String? @map("gaming_status") @db.VarChar(50)
|
|
statusMood String? @map("status_mood") @db.VarChar(50)
|
|
statusMessage String? @map("status_message") @db.VarChar(500)
|
|
updatedAt DateTime @default(now()) @updatedAt @map("updated_at")
|
|
|
|
@@map("activity_status")
|
|
}
|