@woltz/rich-domain 0.2.1 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/mapper.d.ts +4 -0
- package/dist/mapper.d.ts.map +1 -0
- package/dist/mapper.js +3 -0
- package/dist/mapper.js.map +1 -0
- package/dist/paginated-result.d.ts.map +1 -1
- package/dist/paginated-result.js +0 -3
- package/dist/paginated-result.js.map +1 -1
- package/dist/repository/base-repository.d.ts +25 -48
- package/dist/repository/base-repository.d.ts.map +1 -1
- package/dist/repository/base-repository.js +7 -51
- package/dist/repository/base-repository.js.map +1 -1
- package/dist/repository/in-memory-repository.d.ts +12 -8
- package/dist/repository/in-memory-repository.d.ts.map +1 -1
- package/dist/repository/in-memory-repository.js +18 -10
- package/dist/repository/in-memory-repository.js.map +1 -1
- package/dist/repository/index.d.ts +2 -3
- package/dist/repository/index.d.ts.map +1 -1
- package/dist/repository/index.js +2 -2
- package/dist/repository/index.js.map +1 -1
- package/dist/types/index.d.ts +0 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +0 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/unit-of-work.d.ts +2 -2
- package/dist/types/unit-of-work.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +1 -0
- package/src/mapper.ts +3 -0
- package/src/paginated-result.ts +1 -8
- package/src/repository/base-repository.ts +27 -115
- package/src/repository/in-memory-repository.ts +28 -16
- package/src/repository/index.ts +2 -3
- package/src/types/index.ts +0 -1
- package/src/types/unit-of-work.ts +3 -3
- package/tests/repository.test.ts +92 -78
- package/src/repository/mapper.ts +0 -74
- package/src/types/repository.ts +0 -51
package/src/repository/mapper.ts
DELETED
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
// ============================================================================
|
|
2
|
-
// Mapper - Domain ↔ Persistence
|
|
3
|
-
// ============================================================================
|
|
4
|
-
|
|
5
|
-
import type { Aggregate } from "../entity";
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* Mapper interface for converting between Domain and Persistence models
|
|
9
|
-
*
|
|
10
|
-
* @template TDomain - Domain aggregate/entity
|
|
11
|
-
* @template TPersistence - Database model (Prisma, TypeORM, etc.)
|
|
12
|
-
*
|
|
13
|
-
* @example
|
|
14
|
-
* ```ts
|
|
15
|
-
* class UserMapper implements IMapper<User, PrismaUser> {
|
|
16
|
-
* toDomain(persistence: PrismaUser): User {
|
|
17
|
-
* return new User({
|
|
18
|
-
* id: Id.from(persistence.id),
|
|
19
|
-
* name: persistence.name,
|
|
20
|
-
* email: persistence.email,
|
|
21
|
-
* });
|
|
22
|
-
* }
|
|
23
|
-
*
|
|
24
|
-
* toPersistence(domain: User): PrismaUser {
|
|
25
|
-
* return {
|
|
26
|
-
* id: domain.id.value,
|
|
27
|
-
* name: domain.props.name,
|
|
28
|
-
* email: domain.props.email,
|
|
29
|
-
* };
|
|
30
|
-
* }
|
|
31
|
-
* }
|
|
32
|
-
* ```
|
|
33
|
-
*/
|
|
34
|
-
export interface IMapper<TDomain extends Aggregate<any>, TPersistence = any> {
|
|
35
|
-
/**
|
|
36
|
-
* Convert from persistence model to domain aggregate
|
|
37
|
-
*/
|
|
38
|
-
toDomain(persistence: TPersistence): TDomain;
|
|
39
|
-
|
|
40
|
-
/**
|
|
41
|
-
* Convert from domain aggregate to persistence model
|
|
42
|
-
*/
|
|
43
|
-
toPersistence(domain: TDomain): TPersistence;
|
|
44
|
-
|
|
45
|
-
/**
|
|
46
|
-
* Convert array of persistence models to domain aggregates
|
|
47
|
-
*/
|
|
48
|
-
toDomainList?(persistence: TPersistence[]): TDomain[];
|
|
49
|
-
|
|
50
|
-
/**
|
|
51
|
-
* Convert array of domain aggregates to persistence models
|
|
52
|
-
*/
|
|
53
|
-
toPersistenceList?(domain: TDomain[]): TPersistence[];
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
/**
|
|
57
|
-
* Base mapper with default array implementations
|
|
58
|
-
*/
|
|
59
|
-
export abstract class BaseMapper<
|
|
60
|
-
TDomain extends Aggregate<any>,
|
|
61
|
-
TPersistence = any
|
|
62
|
-
> implements IMapper<TDomain, TPersistence>
|
|
63
|
-
{
|
|
64
|
-
abstract toDomain(persistence: TPersistence): TDomain;
|
|
65
|
-
abstract toPersistence(domain: TDomain): TPersistence;
|
|
66
|
-
|
|
67
|
-
toDomainList(persistence: TPersistence[]): TDomain[] {
|
|
68
|
-
return persistence.map((p) => this.toDomain(p));
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
toPersistenceList(domain: TDomain[]): TPersistence[] {
|
|
72
|
-
return domain.map((d) => this.toPersistence(d));
|
|
73
|
-
}
|
|
74
|
-
}
|
package/src/types/repository.ts
DELETED
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import { Criteria } from "../criteria";
|
|
2
|
-
import { Aggregate } from "../entity";
|
|
3
|
-
import { Id } from "../id";
|
|
4
|
-
import { PaginatedResult } from "../paginated-result";
|
|
5
|
-
|
|
6
|
-
export interface IRepository<TDomain extends Aggregate<any>> {
|
|
7
|
-
/**
|
|
8
|
-
* Find by ID
|
|
9
|
-
*/
|
|
10
|
-
findById(id: Id): Promise<TDomain | null>;
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* Find using criteria (filtering, ordering, pagination)
|
|
14
|
-
*/
|
|
15
|
-
find(criteria: Criteria<TDomain>): Promise<PaginatedResult<TDomain>>;
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* Find all (with optional criteria)
|
|
19
|
-
*/
|
|
20
|
-
findAll(criteria?: Criteria<TDomain>): Promise<TDomain[]>;
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
* Find one (first matching criteria)
|
|
24
|
-
*/
|
|
25
|
-
findOne(criteria: Criteria<TDomain>): Promise<TDomain | null>;
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* Save (insert or update based on aggregate.isNew)
|
|
29
|
-
*/
|
|
30
|
-
save(aggregate: TDomain): Promise<void>;
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* Delete aggregate
|
|
34
|
-
*/
|
|
35
|
-
delete(aggregate: TDomain): Promise<void>;
|
|
36
|
-
|
|
37
|
-
/**
|
|
38
|
-
* Delete by ID
|
|
39
|
-
*/
|
|
40
|
-
deleteById(id: Id): Promise<void>;
|
|
41
|
-
|
|
42
|
-
/**
|
|
43
|
-
* Check if exists
|
|
44
|
-
*/
|
|
45
|
-
exists(id: Id): Promise<boolean>;
|
|
46
|
-
|
|
47
|
-
/**
|
|
48
|
-
* Count matching criteria
|
|
49
|
-
*/
|
|
50
|
-
count(criteria?: Criteria<TDomain>): Promise<number>;
|
|
51
|
-
}
|