Files
Palmr/apps/server/prisma/schema.prisma
Daniel Luiz Alves c5660b3c6b feat: Enhance Docker setup and documentation for Palmr.
- Added a new `docker-compose-bind-mount-example.yaml` for easier bind mount configuration.
- Updated `.gitignore` to include the `data/` directory for persistent storage.
- Modified `docker-compose.yaml` to clarify volume paths and improve comments.
- Enhanced `Dockerfile` to support flexible UID/GID configuration and ensure proper directory permissions.
- Updated environment variable handling in `server-start.sh` and Prisma configuration for better database management.
- Revised documentation in `quick-start.mdx` and `uid-gid-configuration.mdx` to reflect new features and best practices for deployment.
2025-06-17 22:46:28 -03:00

219 lines
5.1 KiB
Plaintext

generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "sqlite"
url = env("DATABASE_URL")
}
model User {
id String @id @default(cuid())
firstName String
lastName String
username String @unique
email String @unique
password String?
image String?
isAdmin Boolean @default(false)
isActive Boolean @default(true)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
files File[]
shares Share[]
reverseShares ReverseShare[]
loginAttempts LoginAttempt?
passwordResets PasswordReset[]
authProviders UserAuthProvider[]
@@map("users")
}
model File {
id String @id @default(cuid())
name String
description String?
extension String
size BigInt
objectName String
userId String
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
shares Share[] @relation("ShareFiles")
@@map("files")
}
model Share {
id String @id @default(cuid())
name String?
views Int @default(0)
expiration DateTime?
description String?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
creatorId String?
creator User? @relation(fields: [creatorId], references: [id], onDelete: SetNull)
securityId String @unique
security ShareSecurity @relation(fields: [securityId], references: [id])
files File[] @relation("ShareFiles")
recipients ShareRecipient[]
alias ShareAlias?
@@map("shares")
}
model ShareSecurity {
id String @id @default(cuid())
password String?
maxViews Int?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
share Share?
@@map("share_security")
}
model ShareRecipient {
id String @id @default(cuid())
email String
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
shareId String
share Share @relation(fields: [shareId], references: [id], onDelete: Cascade)
@@map("share_recipients")
}
model AppConfig {
id String @id @default(cuid())
key String @unique
value String
type String
group String
isSystem Boolean @default(true)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@map("app_configs")
}
model LoginAttempt {
id String @id @default(cuid())
userId String @unique
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
attempts Int @default(1)
lastAttempt DateTime @default(now())
@@map("login_attempts")
}
model PasswordReset {
id String @id @default(cuid())
userId String
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
token String @unique
expiresAt DateTime
used Boolean @default(false)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@map("password_resets")
}
model ShareAlias {
id String @id @default(cuid())
alias String @unique
shareId String @unique
share Share @relation(fields: [shareId], references: [id], onDelete: Cascade)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@map("share_aliases")
}
model UserAuthProvider {
id String @id @default(cuid())
userId String
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
provider String
providerId String?
metadata String?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@unique([userId, provider])
@@map("user_auth_providers")
}
model ReverseShare {
id String @id @default(cuid())
name String?
description String?
expiration DateTime?
maxFiles Int?
maxFileSize BigInt?
allowedFileTypes String?
password String?
pageLayout PageLayout @default(DEFAULT)
isActive Boolean @default(true)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
creatorId String
creator User @relation(fields: [creatorId], references: [id], onDelete: Cascade)
files ReverseShareFile[]
alias ReverseShareAlias?
@@map("reverse_shares")
}
model ReverseShareFile {
id String @id @default(cuid())
name String
description String?
extension String
size BigInt
objectName String
uploaderEmail String?
uploaderName String?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
reverseShareId String
reverseShare ReverseShare @relation(fields: [reverseShareId], references: [id], onDelete: Cascade)
@@map("reverse_share_files")
}
model ReverseShareAlias {
id String @id @default(cuid())
alias String @unique
reverseShareId String @unique
reverseShare ReverseShare @relation(fields: [reverseShareId], references: [id], onDelete: Cascade)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@map("reverse_share_aliases")
}
enum PageLayout {
DEFAULT
WETRANSFER
}