```generator client { provider = "prisma-...
# mongodb
o
Copy code
generator client {
  provider        = "prisma-client-js"
  previewFeatures = ["mongodb"]
}

datasource db {
  provider = "mongodb"
  url      = env("DATABASE_URL")
}

enum Source {
  EMAIL
  FACEBOOK
  GOOGLE
  APPLE
}

enum Role {
  CUSTOMER
  BUSINESSOWNER
  BUSINESSMANAGER
  FLOORMANAGER
  SALESSTAFF
  SUPERADMIN
}

model User {
  id                   String        @id @default(dbgenerated()) @map("_id") @db.ObjectId
  email                String        @unique
  firstName            String?
  lastName             String?
  phone                String?
  image                String        @default("<https://via.placeholder.com/350.png>")
  password             String //6 character long including Uppercase and lowercase
  role                 Role          @default(CUSTOMER)
  source               Source        @default(EMAIL)
  address              Address?      @relation(references: [id], fields: [addressId])
  addressId            String?       @db.ObjectId
  resetPasswordToken   String?
  resetPasswordExpires DateTime?
  resetPasswordAt      DateTime?
  verified             Boolean       @default(false)
  Wallet               Wallet?
  createdAt            DateTime      @default(now())
  updatedAt            DateTime      @updatedAt
  Expenses             Expenses[]
  Token                Token[]
  ExpenseItem          ExpenseItem[]
}

model Address {
  id          String    @id @default(dbgenerated()) @map("_id") @db.ObjectId
  addressLine String
  city        String?
  state       String?
  country     String?
  User        User?
  Hangout     Location?
  createdAt   DateTime  @default(now())
  updatedAt   DateTime  @updatedAt
}

model Location {
  id          String      @id @default(dbgenerated()) @map("_id") @db.ObjectId
  name        String
  description String?
  Address     Address?    @relation(fields: [addressId], references: [id])
  addressId   String?     @db.ObjectId
  viewCount   Int         @default(0)
  createdAt   DateTime    @default(now())
  updatedAt   DateTime    @updatedAt
  Inventory   Inventory[]
  Token       Token[]
}

enum Type {
  FOOD
  DRINK
}

enum Measurement {
  BOTTLE
  CARTON6
  CARTON8
  CARTON12
  CARTON24
}

model Inventory {
  id           String        @id @default(dbgenerated()) @map("_id") @db.ObjectId
  name         String
  type         Type          @default(DRINK)
  measurmenr   Measurement?
  quantity     Int
  costPrice    Float
  sellingPrice Float
  published    Boolean       @default(false)
  location     Location?     @relation(fields: [locationId], references: [id])
  locationId   String        @db.ObjectId
  createdAt    DateTime      @default(now())
  updatedAt    DateTime      @updatedAt
  ExpenseItem  ExpenseItem[]
}

// wallet
model Wallet {
  id        String   @id @default(dbgenerated()) @map("_id") @db.ObjectId
  balance   Float    @default(0)
  user      User?    @relation(fields: [userId], references: [id])
  userId    String   @db.ObjectId
  createdAt DateTime @default(now())
  updatedAt DateTime @updatedAt
}

// expenses
model Expenses {
  id          String        @id @default(dbgenerated()) @map("_id") @db.ObjectId
  name        String
  description String
  totalAmount Float         @default(0)
  user        User?         @relation(fields: [userId], references: [id])
  userId      String        @db.ObjectId
  item        ExpenseItem[]
  createdAt   DateTime      @default(now())
  updatedAt   DateTime      @updatedAt
}

model ExpenseItem {
  id          String    @id @default(dbgenerated()) @map("_id") @db.ObjectId
  name        String
  rate        Int       @default(0)
  item        Inventory @relation(fields: [inventoryId], references: [id])
  inventoryId String    @db.ObjectId
  user        User?     @relation(fields: [userId], references: [id])
  userId      String    @db.ObjectId
  Expenses    Expenses? @relation(fields: [expensesId], references: [id])
  expensesId  String?   @db.ObjectId
  createdAt   DateTime  @default(now())
  updatedAt   DateTime  @updatedAt
}

enum Status {
  USED
  PENDING
}

// token
model Token {
  id         String   @id @default(dbgenerated()) @map("_id") @db.ObjectId
  token      String   @unique
  value      Float    @default(0)
  location   Location @relation(fields: [locationId], references: [id])
  locationId String   @db.ObjectId
  user       User     @relation(fields: [userId], references: [id])
  userId     String   @db.ObjectId
  createdAt  DateTime @default(now())
  updatedAt  DateTime @updatedAt
}

// transactions

// activities

// permission

// logs