104 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			104 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| // 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")
 | |
| }
 | |
| 
 | |
| // https://github.com/pantharshit00/prisma-docs-generator
 | |
| generator docs {
 | |
|   provider = "node node_modules/prisma-docs-generator"
 | |
|   output   = "../docs"
 | |
| }
 | |
| 
 | |
| // https://github.com/notiz-dev/prisma-dbml-generator
 | |
| // Viewer: https://dbdiagram.io/d
 | |
| generator dbml {
 | |
|   provider    = "prisma-dbml-generator"
 | |
|   output      = "../docs"
 | |
|   outputName  = "schema.dbml"
 | |
|   projectName = "AssetFlow"
 | |
| }
 | |
| 
 | |
| enum Status {
 | |
|   normal
 | |
|   borrowed
 | |
|   stolen
 | |
|   lost
 | |
| }
 | |
| 
 | |
| model Item {
 | |
|   id      Int     @id @unique @default(autoincrement())
 | |
|   SKU     String? @unique
 | |
|   amount  Int     @default(1)
 | |
|   name    String
 | |
|   Comment String?
 | |
|   status  Status  @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)?
 | |
| 
 | |
|   manufacturer String /// TODO: Do we need this as a mandatory field? Probably we can add another model for manufacturer.
 | |
| 
 | |
|   category   Category @relation(fields: [categoryId], references: [id])
 | |
|   categoryId Int
 | |
| 
 | |
|   items    Item[] @relation("items") /// Item beinhaltet..
 | |
|   baseItem Item[] @relation("items") /// Item zugehörig zu.
 | |
| 
 | |
|   storageLocation   StorageLocation? @relation(fields: [storageLocationId], references: [id])
 | |
|   storageLocationId Int?
 | |
| 
 | |
|   createdAt  DateTime @default(now())
 | |
|   updatedAt  DateTime @updatedAt
 | |
|   importedBy String?
 | |
| }
 | |
| 
 | |
| model StorageLocation {
 | |
|   id            Int          @id @default(autoincrement())
 | |
|   name          String       @unique /// This is our LocationID for external use prefixed with: '%StorageUnit%_'
 | |
|   storageUnit   StorageUnit? @relation(fields: [storageUnitId], references: [id])
 | |
|   storageUnitId Int?
 | |
|   Item          Item[]
 | |
| }
 | |
| 
 | |
| /// A StorageUnit is the base and can hold multiple StorageLocations.
 | |
| model StorageUnit {
 | |
|   id              Int               @id @default(autoincrement())
 | |
|   name            String
 | |
|   street          String
 | |
|   houseNumber     String
 | |
|   zipCode         String
 | |
|   city            String
 | |
|   country         String
 | |
|   StorageLocation StorageLocation[]
 | |
| }
 | |
| 
 | |
| model Category {
 | |
|   id          Int     @id @default(autoincrement())
 | |
|   name        String  @unique
 | |
|   description String?
 | |
|   Item        Item[]
 | |
| }
 | |
| 
 | |
| /// TODO: Add relationship to StorageUnit, Item and if necessary to StorageLocation.
 | |
| model Owner {
 | |
|   id          Int       @id @default(autoincrement())
 | |
|   type        OwnerType @default(person)
 | |
|   name        String
 | |
|   lastName    String?
 | |
|   street      String
 | |
|   houseNumber String
 | |
|   zipCode     String
 | |
|   city        String
 | |
|   country     String
 | |
| }
 | |
| 
 | |
| enum OwnerType {
 | |
|   person
 | |
|   customer
 | |
|   company
 | |
| }
 |