- Backend: Add Financial logic (Ledger, Withdrawals) and KYC Endpoints - Backoffice: Update Prisma Schema and add KYC Review Module - Frontend: Add Company Profile, Wallet View, and Reviews/Ratings UI - Frontend: Enhance Admin Companies Page for KYC Review Queue
165 lines
5.8 KiB
Text
165 lines
5.8 KiB
Text
generator client {
|
|
provider = "prisma-client-js"
|
|
binaryTargets = ["native", "debian-openssl-3.0.x"]
|
|
}
|
|
|
|
datasource db {
|
|
provider = "postgresql"
|
|
url = env("DATABASE_URL")
|
|
}
|
|
|
|
model Company {
|
|
id String @id @default(uuid()) @db.Uuid
|
|
cnpj String @unique
|
|
corporateName String @map("corporate_name")
|
|
category String @default("farmacia")
|
|
licenseNumber String @map("license_number")
|
|
isVerified Boolean @default(false) @map("is_verified")
|
|
latitude Float @default(0)
|
|
longitude Float @default(0)
|
|
city String @default("")
|
|
state String @default("")
|
|
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz
|
|
updatedAt DateTime @updatedAt @map("updated_at") @db.Timestamptz
|
|
|
|
users User[]
|
|
products Product[]
|
|
ordersAsBuyer Order[] @relation("BuyerOrders")
|
|
ordersAsSeller Order[] @relation("SellerOrders")
|
|
|
|
@@map("companies")
|
|
}
|
|
|
|
model User {
|
|
id String @id @default(uuid()) @db.Uuid
|
|
companyId String @map("company_id") @db.Uuid
|
|
company Company @relation(fields: [companyId], references: [id])
|
|
role String
|
|
name String
|
|
username String?
|
|
email String @unique
|
|
passwordHash String @map("password_hash")
|
|
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz
|
|
updatedAt DateTime @updatedAt @map("updated_at") @db.Timestamptz
|
|
|
|
@@map("users")
|
|
}
|
|
|
|
model Product {
|
|
id String @id @default(uuid()) @db.Uuid
|
|
sellerId String @map("seller_id") @db.Uuid
|
|
seller Company @relation(fields: [sellerId], references: [id])
|
|
name String
|
|
description String?
|
|
batch String
|
|
expiresAt DateTime @map("expires_at") @db.Date
|
|
priceCents BigInt @map("price_cents")
|
|
stock BigInt
|
|
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz
|
|
updatedAt DateTime @updatedAt @map("updated_at") @db.Timestamptz
|
|
|
|
orderItems OrderItem[]
|
|
cartItems CartItem[]
|
|
inventoryAdjustments InventoryAdjustment[]
|
|
|
|
@@map("products")
|
|
}
|
|
|
|
model InventoryAdjustment {
|
|
id String @id @default(uuid()) @db.Uuid
|
|
productId String @map("product_id") @db.Uuid
|
|
product Product @relation(fields: [productId], references: [id])
|
|
delta BigInt
|
|
reason String?
|
|
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz
|
|
|
|
@@map("inventory_adjustments")
|
|
}
|
|
|
|
model Order {
|
|
id String @id @default(uuid()) @db.Uuid
|
|
buyerId String @map("buyer_id") @db.Uuid
|
|
sellerId String @map("seller_id") @db.Uuid
|
|
buyer Company @relation("BuyerOrders", fields: [buyerId], references: [id])
|
|
seller Company @relation("SellerOrders", fields: [sellerId], references: [id])
|
|
status String
|
|
totalCents BigInt @map("total_cents")
|
|
paymentMethod String @default("pix") @map("payment_method")
|
|
|
|
shippingRecipientName String? @map("shipping_recipient_name")
|
|
shippingStreet String? @map("shipping_street")
|
|
shippingNumber String? @map("shipping_number")
|
|
shippingComplement String? @map("shipping_complement")
|
|
shippingDistrict String? @map("shipping_district")
|
|
shippingCity String? @map("shipping_city")
|
|
shippingState String? @map("shipping_state")
|
|
shippingZipCode String? @map("shipping_zip_code")
|
|
shippingCountry String? @map("shipping_country")
|
|
|
|
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz
|
|
updatedAt DateTime @updatedAt @map("updated_at") @db.Timestamptz
|
|
|
|
items OrderItem[]
|
|
shipment Shipment?
|
|
review Review?
|
|
|
|
@@map("orders")
|
|
}
|
|
|
|
model OrderItem {
|
|
id String @id @default(uuid()) @db.Uuid
|
|
orderId String @map("order_id") @db.Uuid
|
|
order Order @relation(fields: [orderId], references: [id], onDelete: Cascade)
|
|
productId String @map("product_id") @db.Uuid
|
|
product Product @relation(fields: [productId], references: [id])
|
|
quantity BigInt
|
|
unitCents BigInt @map("unit_cents")
|
|
batch String
|
|
expiresAt DateTime @map("expires_at") @db.Date
|
|
|
|
@@map("order_items")
|
|
}
|
|
|
|
model CartItem {
|
|
id String @id @default(uuid()) @db.Uuid
|
|
buyerId String @map("buyer_id") @db.Uuid
|
|
product Product @relation(fields: [productId], references: [id], onDelete: Cascade)
|
|
productId String @map("product_id") @db.Uuid
|
|
quantity BigInt
|
|
unitCents BigInt @map("unit_cents")
|
|
batch String?
|
|
expiresAt DateTime? @map("expires_at") @db.Date
|
|
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz
|
|
updatedAt DateTime @updatedAt @map("updated_at") @db.Timestamptz
|
|
|
|
@@unique([buyerId, productId])
|
|
@@map("cart_items")
|
|
}
|
|
|
|
model Review {
|
|
id String @id @default(uuid()) @db.Uuid
|
|
orderId String @unique @map("order_id") @db.Uuid
|
|
order Order @relation(fields: [orderId], references: [id])
|
|
buyerId String @map("buyer_id") @db.Uuid
|
|
sellerId String @map("seller_id") @db.Uuid
|
|
rating Int
|
|
comment String?
|
|
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz
|
|
|
|
@@index([sellerId])
|
|
@@map("reviews")
|
|
}
|
|
|
|
model Shipment {
|
|
id String @id @default(uuid()) @db.Uuid
|
|
orderId String @unique @map("order_id") @db.Uuid
|
|
order Order @relation(fields: [orderId], references: [id])
|
|
carrier String
|
|
trackingCode String? @map("tracking_code")
|
|
externalTracking String? @map("external_tracking")
|
|
status String
|
|
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz
|
|
updatedAt DateTime @updatedAt @map("updated_at") @db.Timestamptz
|
|
|
|
@@map("shipments")
|
|
}
|