如果是需要製作客製化保健單,我簡單用 Mermind 建立了以下流程:
sequenceDiagram
客戶->>管理員: 建立需求單
管理員-->>客戶: 審核、給配方
客戶 -->> 管理員: 同意配方、下單
管理員 -) 客戶: 製作、運送
有了流程,我們就來製作自己的模組,首先第一步就是先建立保健單的資料模型。
在 src/modules
底下建立 supplements/models/supplements.ts
並依照 Medusa.js Model 規則建立:
import { model } from "@medusajs/framework/utils"
export const Supplement = model.define("supplement", {
id: model.id().primaryKey(),
requirement: model.text(),
response:model.json().nullable(),
sure:model.boolean().default(false),
})
medusa.js 的 模型model : 建構規則簡要有以下。
id
:產生自動轉換的id碼,為一值
且是數字與英文字母結合。text
:字串 string 屬性number
:整數屬性float
:數字且有小數點屬性bignumber
:可以容納比整數還大的整數boolean
:布林值,只分true
或false
enum
:列舉,用於定義一組有意義的命名常數,讓程式碼更易讀、維護。dateTime
:記錄時間的時間戳記json
:儲存 JSON 化物件array
:定義字串屬性
的陣列primaryKey
:設定主鍵default
:加入預設值nullable
:設定可為空值unique
:設定為唯一值index
:設定此為資料庫索引searchable
:是用來決定 是否被加到全文搜尋 (FTS, Full-Text Search) 索引裡。check
:限制文字長度第二步我們可以建立 service
,主要要讓你對資料庫 model 進行操作、轉換的地方,其功能類似於 功能介面。
在src/modules/supplements
建立service.ts
,並加入以下。
import { MedusaService } from "@medusajs/framework/utils"
import { Supplement } from "./models/supplements"
class SupplementModuleService extends MedusaService({
Supplement,
}) {}
export default SupplementModuleService
當我看到官方教學service
只需要這樣程式碼就可以去其他地方引用並進行對資料的操作了,不知覺好奇這邊 service
不用寫各個函式操作嗎?
真的不用,因為我們繼承 MedusaService
並且給予 Model
讓他進行轉換,除非你要新增其他種輸出函式。
以下官方網站基礎生成的方法:
ID
搜尋單一筆資料❗❗請注意❗❗,當你在其他地方匯入service
,且這個service
有你自己定義的函式。
❗❗Meudsa.js 會自動將其視為非同步的函式。
❗❗所以請確保您自定義的函式必須是非同步的
import { MedusaService } from "@medusajs/framework/utils"
import { Supplement } from "./models/supplements"
class SupplementModuleService extends MedusaService({
Supplement,
}){
// Don't
getStatus(): boolean {
return false
}
// Do
async getStatus(): Promise<boolean> {
return true
}
}
export default SupplementModuleService
將模組會出並定義的目的就是讓Medusa.js
知道我們新增了一項模組,並提供服務。
先在src/modules/supplments
建立index.ts
並將以下內容寫入:
import { Module } from "@medusajs/framework/utils"
import SupplementModuleService from "./service"
export const SUPPLEMENT_MODULE = "supplements"
export default Module(SUPPLEMENT_MODULE, {
service: SupplementModuleService,
})
定義模組的函式主要需要兩個參數:
service
服務的位置接下來我們將此模組導入到 Medusa.js 配置當中,也就是medusa-config.ts
module.exports = defineConfig({
// ...
modules: [
{
resolve: "./src/modules/supplements",
},
],
})
這樣就差不多完成我們的 Module
,但是我們還沒把我們的 Model
進行產生表並且移轉,所以最後一步就是打開我們的Terminal
進行移轉
npx medusa db:generate brand
npx medusa db:migrate
恭喜!!這樣就完成我們的模組建立了~
明天我們我們建立我們的關聯。