1. 基于bun搭建monorepo
bun搭建monorepo的文档地址:bun.sh/guides/inst…
mkdir bidder
cd bidder
bun init -y
.
├── README.md
├── bun.lockb
├── index.ts
├── node_modules
├── package.json
└── tsconfig.json
1 directory, 5 files
mkdir packages
cd packages
mkdir server client shared
cd server // 初始化服务器端项目
bun create elysia .
cd shared // 初始化共享lib
bun init -y
cd client // 生成前端项目
bun create vite . --template react
1.1 tsconfig.json文件的配置
{
"compilerOptions": {
// Enable latest features
"lib": ["ESNext", "DOM"],
"target": "ESNext",
"module": "ESNext",
"moduleDetection": "force",
"jsx": "react-jsx",
"allowJs": true,
// Bundler mode
"moduleResolution": "bundler",
"allowImportingTsExtensions": true,
"verbatimModuleSyntax": true,
"noEmit": true,
// Best practices
"strict": true,
"skipLibCheck": true,
"noFallthroughCasesInSwitch": true,
// Some stricter flags (disabled by default)
"noUnusedLocals": false,
"noUnusedParameters": false,
"noPropertyAccessFromIndexSignature": false
}
}
1.2 项目根目录中package.json配置
{
"name": "bidder",
"module": "index.ts",
"private": true,
"scripts": {
"clean": "rm -rf node_modules packages/server/node_modules packages/client/node_modules",
"dev:client": "cd packages/client && bun run dev",
"dev:server": "cd packages/server && bun run dev",
"dev": "concurrently \"bun run dev:server\" \"bun run dev:client\""
},
"type": "module",
"workspaces": [
"packages/*"
],
"devDependencies": {
"concurrently": "^8.2.2"
}
}
2. edgedb数据库安装与初始化
2.1 数据库地址:www.edgedb.com/
curl https://sh.edgedb.com --proto '=https' -sSf1 | sh
cd server
edgedb project init
├── dbschema
│ ├── default.esdl
│ ├── edgeql-js
│ └── migrations
├── edgedb.toml
├── package.json
├── src
│ ├── app.ts
│ ├── auth.ts
│ ├── db
│ ├── index.ts
│ ├── nats
│ └── routes
└── tsconfig.json
2.2 default.esdl中写数据模型
-
用户模型
-
产品模型
-
竞拍下单模型
-
房间模型
module default {
type User {
required name: str {
constraint exclusive;
constraint max_len_value(50);
};
required passwd: str {
constraint min_len_value(6);
};
}
type Product {
required name: str {
constraint exclusive;
constraint max_len_value(50);
};
required basePrice: int64 {
constraint min_value(0);
};
currentPrice: int64 {
default := 0;
};
required duration: int64 {
default := 300;
};
required timer: int64 {
default := 300;
};
soldAt: datetime;
auctionStarted: bool {
default := false;
};
auctionEnded: bool {
default := false;
};
sold: bool {
default := false;
};
required owner: User;
purchasedBy: User;
currentBidder: User;
multi bids: Bid;
}
type Bid {
user: User;
amount: int64 {
default := 0;
};
time: datetime {
default := std::datetime_current();
}
}
type Room {
required product: Product;
multi users: User;
}
}
2.3 数据库迁移
edgedb create migration
edgedb migrate
bun add edgedb
bun add -D @edgedb/generate
bunx @edgedb/generate edgeql-js // 生成ts版本 query builder
3. 消息队列
3.1 安装nats.io server
go install github.com/nats-io/nats-server/v2@latest
nats-server
flowus.cn/share/ce3dd… 【FlowUs 息流】elysia项目实战