// 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 = "postgresql" url = env("DATABASE_URL") } model User { id String @id @default(cuid()) email String @unique username String @unique password String name String? phone String? address String? isAdmin Boolean @default(false) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt orders Order[] cartItems CartItem[] @@map("users") } model ComponentType { id String @id @default(cuid()) name String @unique // CPU、内存、硬盘、主板、显卡、机箱 description String? components Component[] @@map("component_types") } model Component { id String @id @default(cuid()) name String brand String model String price Float description String? imageUrl String? stock Int @default(0) specifications String? // JSON格式存储规格参数 createdAt DateTime @default(now()) updatedAt DateTime @updatedAt componentTypeId String componentType ComponentType @relation(fields: [componentTypeId], references: [id]) orderItems OrderItem[] cartItems CartItem[] @@map("components") } model Order { id String @id @default(cuid()) orderNumber String @unique totalAmount Float status OrderStatus @default(PENDING) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt userId String user User @relation(fields: [userId], references: [id]) orderItems OrderItem[] @@map("orders") } model OrderItem { id String @id @default(cuid()) quantity Int @default(1) price Float orderId String order Order @relation(fields: [orderId], references: [id], onDelete: Cascade) componentId String component Component @relation(fields: [componentId], references: [id]) @@map("order_items") } model CartItem { id String @id @default(cuid()) quantity Int @default(1) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt userId String user User @relation(fields: [userId], references: [id], onDelete: Cascade) componentId String component Component @relation(fields: [componentId], references: [id], onDelete: Cascade) @@unique([userId, componentId]) // 一个用户对同一个商品只能有一条购物车记录 @@map("cart_items") } enum OrderStatus { PENDING CONFIRMED PROCESSING SHIPPED DELIVERED CANCELLED }