Files
esengine/packages/framework/database/src/index.ts
YHH 71022abc99 feat(database): add database layer architecture (#410)
- Add @esengine/database-drivers for MongoDB/Redis connection management
- Add @esengine/database for Repository pattern with CRUD, pagination, soft delete
- Refactor @esengine/transaction MongoStorage to use shared connection
- Add comprehensive documentation in Chinese and English
2025-12-31 16:26:53 +08:00

153 lines
4.3 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* @zh @esengine/database 数据库操作层
* @en @esengine/database Database Operations Layer
*
* @zh 提供通用的数据库 CRUD 操作、仓库模式、用户管理等功能
* @en Provides generic database CRUD operations, repository pattern, user management
*
* @example
* ```typescript
* import { createMongoConnection } from '@esengine/database-drivers'
* import {
* Repository,
* UserRepository,
* createUserRepository,
* hashPassword,
* verifyPassword,
* } from '@esengine/database'
*
* // 1. 创建连接(来自 database-drivers
* const mongo = createMongoConnection({
* uri: 'mongodb://localhost:27017',
* database: 'game',
* })
* await mongo.connect()
*
* // 2. 使用用户仓库
* const userRepo = createUserRepository(mongo)
*
* // 注册
* const user = await userRepo.register({
* username: 'player1',
* password: 'securePassword123',
* })
*
* // 登录
* const authUser = await userRepo.authenticate('player1', 'securePassword123')
*
* // 3. 自定义仓库
* interface Player extends BaseEntity {
* name: string
* score: number
* level: number
* }
*
* class PlayerRepository extends Repository<Player> {
* constructor(connection: IMongoConnection) {
* super(connection, 'players')
* }
*
* async findTopPlayers(limit = 10): Promise<Player[]> {
* return this.findMany({
* sort: { score: 'desc' },
* limit,
* })
* }
*
* async addScore(playerId: string, points: number): Promise<Player | null> {
* const player = await this.findById(playerId)
* if (!player) return null
* return this.update(playerId, { score: player.score + points })
* }
* }
*
* // 4. 分页查询
* const result = await userRepo.findPaginated(
* { page: 1, pageSize: 20 },
* { where: { isActive: true }, sort: { createdAt: 'desc' } }
* )
* console.log(`第 ${result.page}/${result.totalPages} 页,共 ${result.total} 条`)
* ```
*/
// =============================================================================
// Types | 类型
// =============================================================================
export type {
BaseEntity,
SoftDeleteEntity,
ComparisonOperators,
WhereCondition,
SortDirection,
SortCondition,
QueryOptions,
PaginationParams,
PaginatedResult,
IRepository,
UserEntity
} from './types.js'
// =============================================================================
// Repository | 仓库
// =============================================================================
export { Repository, createRepository } from './Repository.js'
// =============================================================================
// User Repository | 用户仓库
// =============================================================================
export {
UserRepository,
createUserRepository,
type CreateUserParams,
type SafeUser
} from './UserRepository.js'
// =============================================================================
// Password | 密码工具
// =============================================================================
export {
hashPassword,
verifyPassword,
checkPasswordStrength,
type PasswordHashConfig,
type PasswordStrength,
type PasswordStrengthResult
} from './password.js'
// =============================================================================
// Tokens | 服务令牌
// =============================================================================
export {
MongoConnectionToken,
RedisConnectionToken,
UserRepositoryToken,
createServiceToken,
type ServiceToken
} from './tokens.js'
// =============================================================================
// Re-exports from database-drivers | 从 database-drivers 重新导出
// =============================================================================
export type {
IMongoConnection,
IRedisConnection,
MongoConnectionConfig,
RedisConnectionConfig,
ConnectionState,
DatabaseErrorCode
} from '@esengine/database-drivers'
export {
createMongoConnection,
createRedisConnection,
DatabaseError,
ConnectionError,
DuplicateKeyError
} from '@esengine/database-drivers'