# 限時取餐 Meal Time - 資料庫欄位表
[資料庫結構](https://dbdiagram.io/d/61333a55825b5b0146f2c91c)
```
Table "users" {
"id" int [pk]
"username" varchar(64)
"password" varchar(64)
"nickname" varchar(64)
"email" varchar(64)
"phone" varchar(16)
"role" enum['all', 'member', 'vendor', 'admin', 'suspended']
"vendorId" int
"createdAt" datetime
"updatedAt" datetime
}
```
users
|欄位|型態|長度|必填|預設|備註|
|-|-|-|-|-|-|
|id|int||Y|A.I.||
|username|varchar|64|Y|||
|password|varchar|64|Y||需經過 hash|
|nickname|varchar|64|Y|||
|email|varchar|64|Y|||
|phone|varchar|16|Y|||
|role|enum('member', 'vendor', 'admin', 'suspended')||Y|member||
|avatarURL|varchar|64||||
|vendorId|int|||null|"vendor"."id"|
|createdAt|datetime||Y|CURRENTTIME||
|updatedAt|datetime||Y|CURRENTTIME||
***
```
Table "vendors" {
"id" int [pk]
"userId" int
"vendorName" varchar(64)
"address" varchar(128)
"position" point
"phone" varchar(16)
"avatarUrl" varchar(64)
"bannerUrl" varchar(64)
"categoryId" int
"description" text
"openingHour" text
"isOpen" tinyint
"isSuspended" tinyint
"createdAt" datetime
"updatedAt" datetime
}
```
|欄位|型態|長度|必填|預設|備註|
|-|-|-|-|-|-|
|id|int||Y|A.I.||
|userId|integer|64|Y||"users"."id"|
|vendorName|varchar|64|Y|||
|address|varchar|128|Y|||
|position|point||Y|||
|phone|varchar|16|Y|||
|avatarUrl|varchar|64||||
|bannerUrl|varchar|64||||
|categoryId|int||Y|1|"vendor_categories"."id"|
|description|text|||||
|openingHour|text||Y||JSON 格式*|
|isSuspended|boolean||Y|false||
|isOpen|boolean||Y|true||
|createdAt|datetime||Y|CURRENTTIME||
|updatedAt|datetime||Y|CURRENTTIME||
\* `openingHour` 格式:
```
[{
Monday: {
isOpen,
startTime,
endTime
},
Tuesday: {
isOpen,
startTime,
endTime
},
Wednesday: {
isOpen,
startTime,
endTime
},
.
.
.
Sunday: {
isOpen,
startTime,
endTime
},
}]
```
***
```
Table "vendor_categories" {
"id" int [pk]
"name" varchar(64)
"createdAt" datetime
"updatedAt" datetime
}
```
|欄位|型態|長度|必填|預設|備註|
|-|-|-|-|-|-|
|id|int||Y|A.I.||
|name|varchar|64|Y||id: 1 為未分類|
|createdAt|datetime||Y|CURRENTTIME||
|updatedAt|datetime||Y|CURRENTTIME||
***
```
Table "products" {
"id" int [pk]
"vendorId" int
"name" varchar(64)
"categoryId" int
"pictureUrl" varchar(64)
"price" int
"quantity" int
"manufactureDate" date
"expiryDate" date
"description" text
"isAvailable" tinyint
"createdAt" datetime
"updatedAt" datetime
}
```
|欄位|型態|長度|必填|預設|備註|
|-|-|-|-|-|-|
|id|int||Y|A.I.||
|vendorId|int||Y||"vendors"."id"|
|name|varchar|64|Y|||
|categoryId|int||Y|1|"product_categories"."id"|
|pictureUrl|varchar|64||||
|price|int||Y|||
|quantity|int||Y|||
|manufactureDate|date||||前端提交資料時需確認是否至少擇一填寫|
|expiryDate|date||||前端提交資料時需確認是否至少擇一填寫|
|description|text||Y|||
|isAvailable|boolean||Y|true||
|createdAt|datetime||Y|CURRENTTIME||
|updatedAt|datetime||Y|CURRENTTIME||
***
```
Table "product_categories" {
"id" int [pk]
"name" varchar(64)
"createdAt" datetime
"updatedAt" datetime
}
```
|欄位|型態|長度|必填|預設|備註|
|-|-|-|-|-|-|
|id|int||Y|A.I.||
|name|varchar|64|Y||id: 1 為未分類|
|createdAt|datetime||Y|CURRENTTIME||
|updatedAt|datetime||Y|CURRENTTIME||
***
```
Table "orders" {
"id" int [pk]
"orderNumber" varchar(16)
"vendorId" int
"clientId" int
"totalQuantity" int
"totalPrice" int
"pickupTime" datetime
"remarks" text
"isPaid" tinyint
"isCompleted" tinyint
"isCanceledByVendor" tinyint
"isCanceledByClient" tinyint
"createdAt" datetime
"updatedAt" datetime
}
```
|欄位|型態|長度|必填|預設|備註|
|-|-|-|-|-|-|
|id|int||Y|A.I.||
|orderNumber|varchar(16)||Y||每張訂單自己的流水編號|
|vendorId|int||Y||"vendors"."id"|
|clientId|int||Y||"users"."id"|
|totalQuantity|int||Y|||
|totalPrice|int||Y|||
|pickupTime|datetime||Y|||
|remarks|text||Y||訂單備註|
|isPaid|boolean||Y|false||
|isCompleted|boolean||Y|false||
|isCanceledByVendor|boolean||Y|false||
|isCanceledByClient|boolean||Y|false||
|createdAt|datetime||Y|CURRENTTIME||
|updatedAt|datetime||Y|CURRENTTIME||
***
```
Table "order_items" {
"id" int [pk]
"productId" int
"orderId" int
"quantity" int
"createdAt" datetime
"updatedAt" datetime
}
```
|欄位|型態|長度|必填|預設|備註|
|-|-|-|-|-|-|
|id|int||Y|A.I.||
|productId|int||Y||"products"."id"|
|orderId|int||Y||"orders"."id"|
|quantity|int||Y|||
|totalPrice|int||Y|||
|createdAt|datetime||Y|CURRENTTIME||
|updatedAt|datetime||Y|CURRENTTIME||
***
```
Table "faq" {
"id" int [pk]
"question" text
"categoryId" int
"answer" text
"createdAt" datetime
"updatedAt" datetime
}
```
|欄位|型態|長度|必填|預設|備註|
|-|-|-|-|-|-|
|id|int||Y|A.I.||
|question|text||Y|||
|categoryId|int||Y|1|"faq_categories"."id"|
|answer|text||Y|||
|createdAt|datetime||Y|CURRENTTIME||
|updatedAt|datetime||Y|CURRENTTIME||
***
```
Table "faq_categories" {
"id" int [pk]
"name" varchar(64)
"createdAt" datetime
"updatedAt" datetime
}
```
|欄位|型態|長度|必填|預設|備註|
|-|-|-|-|-|-|
|id|int||Y|A.I.||
|name|varchar|64|Y||id: 1 為未分類|
|createdAt|datetime||Y|CURRENTTIME||
|updatedAt|datetime||Y|CURRENTTIME||
***
```
Table "report_messages" {
"id" int
"userId" int
"reportedVendorId" int
"reportedProductId" int
"content" text
"createdAt" datetime
"updatedAt" datetime
}
```
|欄位|型態|長度|必填|預設|備註|
|-|-|-|-|-|-|
|id|int||Y|A.I.||
|userId|int||Y||"users"."id"|
|reportedVendorId|int||Y||"vendors"."id"|
|reportedProductId|int||||"products"."id"|
|content|text||Y|||
|createdAt|datetime||Y|CURRENTTIME||
|updatedAt|datetime||Y|CURRENTTIME||
***
```
Table "messages" {
"id" int
"clientId" int
"vendorId" int
"content" text
"createdAt" datetime
"updatedAt" datetime
}
```
|欄位|型態|長度|必填|預設|備註|
|-|-|-|-|-|-|
|id|int||Y|A.I.||
|clientId|int||Y||"users"."id"|
|vendorId|int||Y||"vendors"."id"|
|content|text||Y|||
|createdAt|datetime||Y|CURRENTTIME||
|updatedAt|datetime||Y|CURRENTTIME||
***
```
Table "messages_to_admin" {
"id" int
"userId" int
"content" text
"createdAt" datetime
"updatedAt" datetime
}
```
|欄位|型態|長度|必填|預設|備註|
|-|-|-|-|-|-|
|id|int||Y|A.I.||
|userId|int||Y||"users"."id"|
|content|text||Y|||
|createdAt|datetime||Y|CURRENTTIME||
|updatedAt|datetime||Y|CURRENTTIME||