数据库仓库
@esengine/database 是 ESEngine 的数据库操作层,基于 Repository 模式提供类型安全的 CRUD 操作。
- Repository 模式 - 泛型 CRUD 操作,类型安全
- 分页查询 - 内置分页支持
- 软删除 - 可选的软删除与恢复
- 用户管理 - 开箱即用的 UserRepository
- 密码安全 - 使用 scrypt 的密码哈希工具
npm install @esengine/database @esengine/database-driversimport { createMongoConnection } from '@esengine/database-drivers'import { Repository, createRepository } from '@esengine/database'
// 定义实体interface Player { id: string name: string score: number createdAt: Date updatedAt: Date}
// 创建连接const mongo = createMongoConnection({ uri: 'mongodb://localhost:27017', database: 'game'})await mongo.connect()
// 创建仓库const playerRepo = createRepository<Player>(mongo, 'players')
// CRUD 操作const player = await playerRepo.create({ name: 'John', score: 0})
const found = await playerRepo.findById(player.id)
await playerRepo.update(player.id, { score: 100 })
await playerRepo.delete(player.id)import { Repository, BaseEntity } from '@esengine/database'import type { IMongoConnection } from '@esengine/database-drivers'
interface Player extends BaseEntity { name: string score: number rank?: string}
class PlayerRepository extends Repository<Player> { constructor(connection: IMongoConnection) { super(connection, 'players') }
async findTopPlayers(limit: number = 10): Promise<Player[]> { return this.findMany({ sort: { score: 'desc' }, limit }) }
async findByRank(rank: string): Promise<Player[]> { return this.findMany({ where: { rank } }) }
async incrementScore(playerId: string, amount: number): Promise<Player | null> { const player = await this.findById(playerId) if (!player) return null return this.update(playerId, { score: player.score + amount }) }}
// 使用const playerRepo = new PlayerRepository(mongo)const topPlayers = await playerRepo.findTopPlayers(5)import { UserRepository } from '@esengine/database'
const userRepo = new UserRepository(mongo)
// 注册新用户const user = await userRepo.register({ username: 'john', password: 'securePassword123', email: 'john@example.com'})
// 认证const authenticated = await userRepo.authenticate('john', 'securePassword123')if (authenticated) { console.log('登录成功:', authenticated.username)}
// 修改密码await userRepo.changePassword(user.id, 'securePassword123', 'newPassword456')
// 角色管理await userRepo.addRole(user.id, 'admin')await userRepo.removeRole(user.id, 'admin')
// 查询用户const admins = await userRepo.findByRole('admin')const john = await userRepo.findByUsername('john')