2023-04-30 22:04:13 +02:00
// This is your Prisma schema file,
// learn more about it in the docs: https://pris.ly/d/prisma-schema
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "mysql"
url = env("DATABASE_URL")
}
2023-05-06 20:30:32 +02:00
// https://github.com/pantharshit00/prisma-docs-generator
generator docs {
provider = "node node_modules/prisma-docs-generator"
2023-05-12 23:57:21 +02:00
output = "../docs"
2023-05-06 20:30:32 +02:00
}
2023-05-06 20:48:58 +02:00
// https://github.com/notiz-dev/prisma-dbml-generator
// Viewer: https://dbdiagram.io/d
generator dbml {
2023-05-12 23:57:21 +02:00
provider = "prisma-dbml-generator"
output = "../docs"
2023-05-06 20:48:58 +02:00
outputName = "schema.dbml"
projectName = "AssetFlow"
}
2023-05-15 00:21:53 +02:00
enum itemStatus {
2023-04-30 22:04:13 +02:00
normal
borrowed
stolen
lost
}
model Item {
2023-05-15 00:21:53 +02:00
id Int @id @unique @default(autoincrement())
SKU String? @unique
amount Int @default(1)
2023-05-14 13:33:15 +02:00
name String
2023-05-15 00:21:53 +02:00
comment String?
status itemStatus @default(normal) /// TODO: Would it be better to create a separate model for this as well instead of providing several static statuses to choose from(enum)?
2023-05-14 13:33:15 +02:00
2023-05-15 00:21:53 +02:00
manufacturer String
2023-05-14 13:33:15 +02:00
2023-05-15 18:48:37 +02:00
category itemCategory? @relation(fields: [categoryId], references: [id])
categoryId Int?
2023-05-14 13:33:15 +02:00
2023-05-20 22:03:39 +02:00
contents Item[] @relation("items") /// Item beinhaltet..
2023-05-14 13:33:15 +02:00
baseItem Item[] @relation("items") /// Item zugehörig zu.
storageLocation StorageLocation? @relation(fields: [storageLocationId], references: [id])
2023-05-01 18:36:24 +02:00
storageLocationId Int?
2023-05-14 13:33:15 +02:00
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
importedBy String?
2023-04-30 22:04:13 +02:00
}
model StorageLocation {
2023-05-12 23:57:21 +02:00
id Int @id @default(autoincrement())
2023-05-14 13:33:15 +02:00
name String @unique /// This is our LocationID for external use prefixed with: '%StorageUnit%_'
2023-05-12 23:57:21 +02:00
storageUnit StorageUnit? @relation(fields: [storageUnitId], references: [id])
storageUnitId Int?
Item Item[]
2023-04-30 22:04:13 +02:00
}
2023-05-14 13:33:15 +02:00
/// A StorageUnit is the base and can hold multiple StorageLocations.
2023-05-12 23:57:21 +02:00
model StorageUnit {
2023-05-15 00:21:53 +02:00
id Int @id @default(autoincrement())
2023-05-16 00:03:05 +02:00
name String @unique
2023-05-15 00:21:53 +02:00
2023-05-16 00:03:05 +02:00
contactInfo contactInfo @relation(fields: [contactInfoId], references: [id])
contactInfoId Int
2023-05-15 00:21:53 +02:00
2023-04-30 22:04:13 +02:00
StorageLocation StorageLocation[]
}
2023-05-01 22:15:35 +02:00
2023-05-15 00:21:53 +02:00
model itemCategory {
2023-05-01 22:15:35 +02:00
id Int @id @default(autoincrement())
2023-05-12 23:57:21 +02:00
name String @unique
2023-05-01 22:15:35 +02:00
description String?
Item Item[]
}
2023-05-14 13:33:15 +02:00
/// TODO: Add relationship to StorageUnit, Item and if necessary to StorageLocation.
2023-05-15 00:21:53 +02:00
model contactInfo {
id Int @id @default(autoincrement())
type contactType @default(person)
name String?
2023-05-14 13:33:15 +02:00
lastName String?
street String
houseNumber String
zipCode String
city String
country String
2023-05-15 00:21:53 +02:00
StorageUnit StorageUnit[]
2023-05-14 13:33:15 +02:00
}
2023-05-15 00:21:53 +02:00
enum contactType {
2023-05-16 00:03:05 +02:00
storageUnit
2023-05-14 13:33:15 +02:00
person
customer
company
2023-05-15 00:21:53 +02:00
partner
enemy
2023-05-14 13:33:15 +02:00
}