- 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
49 lines
1.7 KiB
Markdown
49 lines
1.7 KiB
Markdown
---
|
|
"@esengine/database-drivers": minor
|
|
"@esengine/database": minor
|
|
"@esengine/transaction": minor
|
|
---
|
|
|
|
feat: add database layer architecture
|
|
|
|
Added new database packages with layered architecture:
|
|
|
|
**@esengine/database-drivers (Layer 1)**
|
|
- MongoDB connection with pool management, auto-reconnect, events
|
|
- Redis connection with auto-reconnect, key prefix
|
|
- Type-safe `IMongoCollection<T>` interface decoupled from mongodb types
|
|
- Service tokens for dependency injection (`MongoConnectionToken`, `RedisConnectionToken`)
|
|
|
|
**@esengine/database (Layer 2)**
|
|
- Generic `Repository<T>` with CRUD, pagination, soft delete
|
|
- `UserRepository` with registration, authentication, role management
|
|
- Password hashing utilities using scrypt
|
|
- Query operators: `$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$in`, `$nin`, `$like`, `$regex`
|
|
|
|
**@esengine/transaction**
|
|
- Refactored `MongoStorage` to use shared connection from `@esengine/database-drivers`
|
|
- Removed factory pattern in favor of shared connection (breaking change)
|
|
- Simplified API: `createMongoStorage(connection, options?)`
|
|
|
|
Example usage:
|
|
```typescript
|
|
import { createMongoConnection } from '@esengine/database-drivers'
|
|
import { UserRepository } from '@esengine/database'
|
|
import { createMongoStorage, TransactionManager } from '@esengine/transaction'
|
|
|
|
// Create shared connection
|
|
const mongo = createMongoConnection({
|
|
uri: 'mongodb://localhost:27017',
|
|
database: 'game'
|
|
})
|
|
await mongo.connect()
|
|
|
|
// Use for database operations
|
|
const userRepo = new UserRepository(mongo)
|
|
await userRepo.register({ username: 'john', password: '123456' })
|
|
|
|
// Use for transactions (same connection)
|
|
const storage = createMongoStorage(mongo)
|
|
const txManager = new TransactionManager({ storage })
|
|
```
|