@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.
Files changed (42) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/index.d.ts +1 -0
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +1 -0
  5. package/dist/index.js.map +1 -1
  6. package/dist/mapper.d.ts +4 -0
  7. package/dist/mapper.d.ts.map +1 -0
  8. package/dist/mapper.js +3 -0
  9. package/dist/mapper.js.map +1 -0
  10. package/dist/paginated-result.d.ts.map +1 -1
  11. package/dist/paginated-result.js +0 -3
  12. package/dist/paginated-result.js.map +1 -1
  13. package/dist/repository/base-repository.d.ts +25 -48
  14. package/dist/repository/base-repository.d.ts.map +1 -1
  15. package/dist/repository/base-repository.js +7 -51
  16. package/dist/repository/base-repository.js.map +1 -1
  17. package/dist/repository/in-memory-repository.d.ts +12 -8
  18. package/dist/repository/in-memory-repository.d.ts.map +1 -1
  19. package/dist/repository/in-memory-repository.js +18 -10
  20. package/dist/repository/in-memory-repository.js.map +1 -1
  21. package/dist/repository/index.d.ts +2 -3
  22. package/dist/repository/index.d.ts.map +1 -1
  23. package/dist/repository/index.js +2 -2
  24. package/dist/repository/index.js.map +1 -1
  25. package/dist/types/index.d.ts +0 -1
  26. package/dist/types/index.d.ts.map +1 -1
  27. package/dist/types/index.js +0 -1
  28. package/dist/types/index.js.map +1 -1
  29. package/dist/types/unit-of-work.d.ts +2 -2
  30. package/dist/types/unit-of-work.d.ts.map +1 -1
  31. package/package.json +1 -1
  32. package/src/index.ts +1 -0
  33. package/src/mapper.ts +3 -0
  34. package/src/paginated-result.ts +1 -8
  35. package/src/repository/base-repository.ts +27 -115
  36. package/src/repository/in-memory-repository.ts +28 -16
  37. package/src/repository/index.ts +2 -3
  38. package/src/types/index.ts +0 -1
  39. package/src/types/unit-of-work.ts +3 -3
  40. package/tests/repository.test.ts +92 -78
  41. package/src/repository/mapper.ts +0 -74
  42. package/src/types/repository.ts +0 -51
@@ -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
- }
@@ -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
- }