Files
portfolio/prisma/schema.prisma
2026-01-07 14:30:00 +01:00

133 lines
4.6 KiB
Plaintext

generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
model Project {
id Int @id @default(autoincrement())
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")
@@index([category])
@@index([featured])
@@index([published])
@@index([difficulty])
@@index([createdAt])
@@index([tags])
}
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")
}