@volontariapp/domain-user 2.3.5 → 2.3.7-snap-41ca1a9

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 (120) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/entities/user.entity.d.ts +3 -1
  3. package/dist/entities/user.entity.d.ts.map +1 -1
  4. package/dist/entities/user.entity.js +41 -0
  5. package/dist/entities/user.entity.js.map +1 -1
  6. package/dist/models/mapper.d.ts +2 -0
  7. package/dist/models/mapper.d.ts.map +1 -0
  8. package/dist/models/mapper.js +36 -0
  9. package/dist/models/mapper.js.map +1 -0
  10. package/dist/models/user.model.js +3 -3
  11. package/dist/models/user.model.js.map +1 -1
  12. package/dist/repositories/index.d.ts +4 -0
  13. package/dist/repositories/index.d.ts.map +1 -0
  14. package/dist/repositories/index.js +4 -0
  15. package/dist/repositories/index.js.map +1 -0
  16. package/dist/repositories/interfaces/badge.repository.d.ts +11 -0
  17. package/dist/repositories/interfaces/badge.repository.d.ts.map +1 -0
  18. package/dist/repositories/interfaces/badge.repository.js +2 -0
  19. package/dist/repositories/interfaces/badge.repository.js.map +1 -0
  20. package/dist/repositories/interfaces/index.d.ts +3 -0
  21. package/dist/repositories/interfaces/index.d.ts.map +1 -0
  22. package/dist/repositories/interfaces/index.js +3 -0
  23. package/dist/repositories/interfaces/index.js.map +1 -0
  24. package/dist/repositories/interfaces/user.repository.d.ts +16 -0
  25. package/dist/repositories/interfaces/user.repository.d.ts.map +1 -0
  26. package/dist/repositories/interfaces/user.repository.js +2 -0
  27. package/dist/repositories/interfaces/user.repository.js.map +1 -0
  28. package/dist/repositories/postgres-badge.repository.d.ts +12 -0
  29. package/dist/repositories/postgres-badge.repository.d.ts.map +1 -0
  30. package/dist/repositories/postgres-badge.repository.js +38 -0
  31. package/dist/repositories/postgres-badge.repository.js.map +1 -0
  32. package/dist/repositories/postgres-user.repository.d.ts +23 -0
  33. package/dist/repositories/postgres-user.repository.d.ts.map +1 -0
  34. package/dist/repositories/postgres-user.repository.js +94 -0
  35. package/dist/repositories/postgres-user.repository.js.map +1 -0
  36. package/dist/services/auth.service.d.ts +13 -0
  37. package/dist/services/auth.service.d.ts.map +1 -0
  38. package/dist/services/auth.service.js +95 -0
  39. package/dist/services/auth.service.js.map +1 -0
  40. package/dist/services/badge.service.d.ts +17 -0
  41. package/dist/services/badge.service.d.ts.map +1 -0
  42. package/dist/services/badge.service.js +152 -0
  43. package/dist/services/badge.service.js.map +1 -0
  44. package/dist/services/user.service.d.ts +22 -0
  45. package/dist/services/user.service.d.ts.map +1 -0
  46. package/dist/services/user.service.js +196 -0
  47. package/dist/services/user.service.js.map +1 -0
  48. package/dist/test/__test-utils__/factories/badge.factory.d.ts +19 -0
  49. package/dist/test/__test-utils__/factories/badge.factory.d.ts.map +1 -0
  50. package/dist/test/__test-utils__/factories/badge.factory.js +27 -0
  51. package/dist/test/__test-utils__/factories/badge.factory.js.map +1 -0
  52. package/dist/test/__test-utils__/factories/commands.factory.d.ts +16 -0
  53. package/dist/test/__test-utils__/factories/commands.factory.d.ts.map +1 -0
  54. package/dist/test/__test-utils__/factories/commands.factory.js +12 -0
  55. package/dist/test/__test-utils__/factories/commands.factory.js.map +1 -0
  56. package/dist/test/__test-utils__/factories/user.factory.d.ts +8 -0
  57. package/dist/test/__test-utils__/factories/user.factory.d.ts.map +1 -0
  58. package/dist/test/__test-utils__/factories/user.factory.js +42 -0
  59. package/dist/test/__test-utils__/factories/user.factory.js.map +1 -0
  60. package/dist/test/__test-utils__/mocks/badge.repository.mock.d.ts +4 -0
  61. package/dist/test/__test-utils__/mocks/badge.repository.mock.d.ts.map +1 -0
  62. package/dist/test/__test-utils__/mocks/badge.repository.mock.js +11 -0
  63. package/dist/test/__test-utils__/mocks/badge.repository.mock.js.map +1 -0
  64. package/dist/test/__test-utils__/mocks/user.repository.mock.d.ts +4 -0
  65. package/dist/test/__test-utils__/mocks/user.repository.mock.d.ts.map +1 -0
  66. package/dist/test/__test-utils__/mocks/user.repository.mock.js +16 -0
  67. package/dist/test/__test-utils__/mocks/user.repository.mock.js.map +1 -0
  68. package/dist/test/data-source.d.ts +8 -0
  69. package/dist/test/data-source.d.ts.map +1 -0
  70. package/dist/test/data-source.js +36 -0
  71. package/dist/test/data-source.js.map +1 -0
  72. package/dist/test/integration/postgres-badge.repository.int.spec.d.ts +2 -0
  73. package/dist/test/integration/postgres-badge.repository.int.spec.d.ts.map +1 -0
  74. package/dist/test/integration/postgres-badge.repository.int.spec.js +129 -0
  75. package/dist/test/integration/postgres-badge.repository.int.spec.js.map +1 -0
  76. package/dist/test/integration/postgres-user.repository.int.spec.d.ts +2 -0
  77. package/dist/test/integration/postgres-user.repository.int.spec.d.ts.map +1 -0
  78. package/dist/test/integration/postgres-user.repository.int.spec.js +222 -0
  79. package/dist/test/integration/postgres-user.repository.int.spec.js.map +1 -0
  80. package/dist/test/migrations/1776334421317-InitialUserSchema.d.ts +7 -0
  81. package/dist/test/migrations/1776334421317-InitialUserSchema.d.ts.map +1 -0
  82. package/dist/test/migrations/1776334421317-InitialUserSchema.js +58 -0
  83. package/dist/test/migrations/1776334421317-InitialUserSchema.js.map +1 -0
  84. package/dist/test/setup.d.ts +2 -0
  85. package/dist/test/setup.d.ts.map +1 -0
  86. package/dist/test/setup.js +2 -0
  87. package/dist/test/setup.js.map +1 -0
  88. package/dist/test/unit/auth.service.unit.spec.d.ts +2 -0
  89. package/dist/test/unit/auth.service.unit.spec.d.ts.map +1 -0
  90. package/dist/test/unit/auth.service.unit.spec.js +233 -0
  91. package/dist/test/unit/auth.service.unit.spec.js.map +1 -0
  92. package/dist/test/unit/badge.service.unit.spec.d.ts +2 -0
  93. package/dist/test/unit/badge.service.unit.spec.d.ts.map +1 -0
  94. package/dist/test/unit/badge.service.unit.spec.js +137 -0
  95. package/dist/test/unit/badge.service.unit.spec.js.map +1 -0
  96. package/dist/test/unit/mapper.unit.spec.d.ts +2 -0
  97. package/dist/test/unit/mapper.unit.spec.d.ts.map +1 -0
  98. package/dist/test/unit/mapper.unit.spec.js +358 -0
  99. package/dist/test/unit/mapper.unit.spec.js.map +1 -0
  100. package/dist/test/unit/user.service.unit.spec.d.ts +2 -0
  101. package/dist/test/unit/user.service.unit.spec.d.ts.map +1 -0
  102. package/dist/test/unit/user.service.unit.spec.js +496 -0
  103. package/dist/test/unit/user.service.unit.spec.js.map +1 -0
  104. package/dist/value-objects/auth.vo.d.ts +26 -0
  105. package/dist/value-objects/auth.vo.d.ts.map +1 -0
  106. package/dist/value-objects/auth.vo.js +41 -0
  107. package/dist/value-objects/auth.vo.js.map +1 -0
  108. package/dist/value-objects/badge.vo.d.ts +28 -0
  109. package/dist/value-objects/badge.vo.d.ts.map +1 -0
  110. package/dist/value-objects/badge.vo.js +37 -0
  111. package/dist/value-objects/badge.vo.js.map +1 -0
  112. package/dist/value-objects/index.d.ts +4 -0
  113. package/dist/value-objects/index.d.ts.map +1 -0
  114. package/dist/value-objects/index.js +4 -0
  115. package/dist/value-objects/index.js.map +1 -0
  116. package/dist/value-objects/user.vo.d.ts +40 -0
  117. package/dist/value-objects/user.vo.d.ts.map +1 -0
  118. package/dist/value-objects/user.vo.js +53 -0
  119. package/dist/value-objects/user.vo.js.map +1 -0
  120. package/package.json +13 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"badge.service.d.ts","sourceRoot":"","sources":["../../src/services/badge.service.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAG1D,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAEnG,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,CAAC;AAElE,qBACa,YAAY;IAKrB,OAAO,CAAC,QAAQ,CAAC,eAAe;IAJlC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA8C;gBAIlD,eAAe,EAAE,gBAAgB;IAG9C,QAAQ,CAAC,EAAE,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC;IAgB3C,UAAU,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC;IAgBjD,OAAO,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAWjC,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAYrD,MAAM,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,WAAW,CAAC;IAoBrD,MAAM,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,WAAW,CAAC;IAqBlE,MAAM,CAAC,EAAE,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;CAczC"}
@@ -0,0 +1,152 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
11
+ return function (target, key) { decorator(target, key, paramIndex); }
12
+ };
13
+ var BadgeService_1;
14
+ import { Inject, Injectable } from '@nestjs/common';
15
+ import { Logger } from '@volontariapp/logger';
16
+ import { PostgresBadgeRepository } from '../repositories/postgres-badge.repository.js';
17
+ import { isBaseError, isDatabaseDriverError } from '@volontariapp/errors';
18
+ import { BADGE_NOT_FOUND, BADGE_ALREADY_EXISTS, DATABASE_ERROR } from '@volontariapp/errors-nest';
19
+ import { BadgeId, BadgeSlug, CreateBadgeInput, UpdateBadgeInput } from '../value-objects/index.js';
20
+ export { BadgeId, BadgeSlug, CreateBadgeInput, UpdateBadgeInput };
21
+ let BadgeService = BadgeService_1 = class BadgeService {
22
+ badgeRepository;
23
+ logger = new Logger({ context: BadgeService_1.name });
24
+ constructor(badgeRepository) {
25
+ this.badgeRepository = badgeRepository;
26
+ }
27
+ async findById(id) {
28
+ try {
29
+ const badge = await this.badgeRepository.findById(id.value);
30
+ if (!badge) {
31
+ this.logger.warn(`Badge with id ${id.value} not found`);
32
+ throw BADGE_NOT_FOUND(id.value, 'id');
33
+ }
34
+ return badge;
35
+ }
36
+ catch (error) {
37
+ if (isBaseError(error))
38
+ throw error;
39
+ const err = error;
40
+ this.logger.error(`Error while finding badge by id ${id.value}: ${err.message}`);
41
+ throw DATABASE_ERROR(`finding badge by id ${id.value}`, err.message);
42
+ }
43
+ }
44
+ async findBySlug(slug) {
45
+ try {
46
+ const badge = await this.badgeRepository.findBySlug(slug.value);
47
+ if (!badge) {
48
+ this.logger.warn(`Badge with slug ${slug.value} not found`);
49
+ throw BADGE_NOT_FOUND(slug.value, 'slug');
50
+ }
51
+ return badge;
52
+ }
53
+ catch (error) {
54
+ if (isBaseError(error))
55
+ throw error;
56
+ const err = error;
57
+ this.logger.error(`Error while finding badge by slug ${slug.value}: ${err.message}`);
58
+ throw DATABASE_ERROR(`finding badge by slug ${slug.value}`, err.message);
59
+ }
60
+ }
61
+ async findAll() {
62
+ try {
63
+ return await this.badgeRepository.findAll();
64
+ }
65
+ catch (error) {
66
+ if (isBaseError(error))
67
+ throw error;
68
+ const err = error;
69
+ this.logger.error(`Error while finding all badges: ${err.message}`);
70
+ throw DATABASE_ERROR('finding all badges', err.message);
71
+ }
72
+ }
73
+ async findManyByIds(ids) {
74
+ try {
75
+ return await this.badgeRepository.findManyByIds(ids.map((id) => id.value));
76
+ }
77
+ catch (error) {
78
+ if (isBaseError(error))
79
+ throw error;
80
+ const err = error;
81
+ const raw = ids.map((id) => id.value).join(', ');
82
+ this.logger.error(`Error while finding badges by ids ${raw}: ${err.message}`);
83
+ throw DATABASE_ERROR(`finding badges by ids ${raw}`, err.message);
84
+ }
85
+ }
86
+ async create(input) {
87
+ try {
88
+ return await this.badgeRepository.create({
89
+ name: input.name,
90
+ slug: input.slug,
91
+ description: input.description,
92
+ iconPath: input.iconPath,
93
+ });
94
+ }
95
+ catch (error) {
96
+ if (isBaseError(error))
97
+ throw error;
98
+ if (isDatabaseDriverError(error) && error.code === '23505') {
99
+ this.logger.warn(`Badge with slug ${input.slug} already exists`);
100
+ throw BADGE_ALREADY_EXISTS(input.slug);
101
+ }
102
+ const err = error;
103
+ this.logger.error(`Error while creating badge: ${err.message}`);
104
+ throw DATABASE_ERROR('creating badge', err.message);
105
+ }
106
+ }
107
+ async update(id, input) {
108
+ try {
109
+ const updatedBadge = await this.badgeRepository.update(id.value, {
110
+ name: input.name,
111
+ slug: input.slug,
112
+ description: input.description,
113
+ iconPath: input.iconPath,
114
+ });
115
+ if (!updatedBadge) {
116
+ this.logger.warn(`Badge with id ${id.value} not found for update`);
117
+ throw BADGE_NOT_FOUND(id.value, 'id');
118
+ }
119
+ return updatedBadge;
120
+ }
121
+ catch (error) {
122
+ if (isBaseError(error))
123
+ throw error;
124
+ const err = error;
125
+ this.logger.error(`Error while updating badge with id ${id.value}: ${err.message}`);
126
+ throw DATABASE_ERROR(`updating badge with id ${id.value}`, err.message);
127
+ }
128
+ }
129
+ async delete(id) {
130
+ try {
131
+ const deleted = await this.badgeRepository.delete(id.value);
132
+ if (!deleted) {
133
+ this.logger.warn(`Badge with id ${id.value} not found for deletion`);
134
+ throw BADGE_NOT_FOUND(id.value, 'id');
135
+ }
136
+ }
137
+ catch (error) {
138
+ if (isBaseError(error))
139
+ throw error;
140
+ const err = error;
141
+ this.logger.error(`Error while deleting badge with id ${id.value}: ${err.message}`);
142
+ throw DATABASE_ERROR(`deleting badge with id ${id.value}`, err.message);
143
+ }
144
+ }
145
+ };
146
+ BadgeService = BadgeService_1 = __decorate([
147
+ Injectable(),
148
+ __param(0, Inject(PostgresBadgeRepository)),
149
+ __metadata("design:paramtypes", [Object])
150
+ ], BadgeService);
151
+ export { BadgeService };
152
+ //# sourceMappingURL=badge.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"badge.service.js","sourceRoot":"","sources":["../../src/services/badge.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { IUserRepository } from '../repositories/index.js';
2
+ import { UserEntity } from '../entities/user.entity.js';
3
+ import { BadgeService } from './badge.service.js';
4
+ import { UserId, UserEmail, UserRna, UpdateUserInput, PaginationInput, UserListResult, ImpactScore } from '../value-objects/index.js';
5
+ import { BadgeId } from '../value-objects/index.js';
6
+ export { UserId, UserEmail, UserRna, UpdateUserInput, PaginationInput, UserListResult, ImpactScore, };
7
+ export declare class UserService {
8
+ private readonly userRepository;
9
+ private readonly badgeService;
10
+ private readonly logger;
11
+ constructor(userRepository: IUserRepository, badgeService: BadgeService);
12
+ findById(id: UserId): Promise<UserEntity>;
13
+ findByEmail(email: UserEmail): Promise<UserEntity>;
14
+ findByRna(rna: UserRna): Promise<UserEntity>;
15
+ findAll(pagination?: PaginationInput): Promise<UserListResult>;
16
+ update(id: UserId, input: UpdateUserInput): Promise<UserEntity>;
17
+ delete(id: UserId): Promise<void>;
18
+ addBadgeToUser(userId: UserId, badgeId: BadgeId): Promise<void>;
19
+ removeBadgeFromUser(userId: UserId, badgeId: BadgeId): Promise<void>;
20
+ incrementImpactScore(userId: UserId, score: ImpactScore): Promise<void>;
21
+ }
22
+ //# sourceMappingURL=user.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user.service.d.ts","sourceRoot":"","sources":["../../src/services/user.service.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAWxD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EACL,MAAM,EACN,SAAS,EACT,OAAO,EACP,eAAe,EACf,eAAe,EACf,cAAc,EACd,WAAW,EACZ,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AAEpD,OAAO,EACL,MAAM,EACN,SAAS,EACT,OAAO,EACP,eAAe,EACf,eAAe,EACf,cAAc,EACd,WAAW,GACZ,CAAC;AAEF,qBACa,WAAW;IAKpB,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAL/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA6C;gBAIjD,cAAc,EAAE,eAAe,EAC/B,YAAY,EAAE,YAAY;IAGvC,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAgBzC,WAAW,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC;IAoBlD,SAAS,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC;IAgB5C,OAAO,CAAC,UAAU,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC;IAe9D,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC;IAyB/D,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAejC,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAqB/D,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAyBpE,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;CAqB9E"}
@@ -0,0 +1,196 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
11
+ return function (target, key) { decorator(target, key, paramIndex); }
12
+ };
13
+ var UserService_1;
14
+ import { Inject, Injectable } from '@nestjs/common';
15
+ import { Logger } from '@volontariapp/logger';
16
+ import { PostgresUserRepository } from '../repositories/postgres-user.repository.js';
17
+ import { UserEntity } from '../entities/user.entity.js';
18
+ import { isBaseError } from '@volontariapp/errors';
19
+ import { calculateHash } from '@volontariapp/crypto';
20
+ import { USER_NOT_FOUND, USER_ALREADY_HAS_BADGE, USER_BADGE_NOT_FOUND, INVALID_RNA, INVALID_SCORE_INCREMENT, DATABASE_ERROR, } from '@volontariapp/errors-nest';
21
+ import { BadgeService } from './badge.service.js';
22
+ import { UserId, UserEmail, UserRna, UpdateUserInput, PaginationInput, UserListResult, ImpactScore, } from '../value-objects/index.js';
23
+ export { UserId, UserEmail, UserRna, UpdateUserInput, PaginationInput, UserListResult, ImpactScore, };
24
+ let UserService = UserService_1 = class UserService {
25
+ userRepository;
26
+ badgeService;
27
+ logger = new Logger({ context: UserService_1.name });
28
+ constructor(userRepository, badgeService) {
29
+ this.userRepository = userRepository;
30
+ this.badgeService = badgeService;
31
+ }
32
+ async findById(id) {
33
+ try {
34
+ const user = await this.userRepository.findById(id.value);
35
+ if (!user) {
36
+ this.logger.warn(`User with id ${id.value} not found`);
37
+ throw USER_NOT_FOUND(id.value);
38
+ }
39
+ return user;
40
+ }
41
+ catch (error) {
42
+ if (isBaseError(error))
43
+ throw error;
44
+ const err = error;
45
+ this.logger.error(`Error while finding user by id ${id.value}: ${err.message}`);
46
+ throw DATABASE_ERROR(`finding user by id ${id.value}`, err.message);
47
+ }
48
+ }
49
+ async findByEmail(email) {
50
+ try {
51
+ const user = await this.userRepository.findByEmail(email.value);
52
+ if (!user) {
53
+ this.logger.warn(`User with email hash ${calculateHash(email.value).slice(0, 8)} not found`);
54
+ throw USER_NOT_FOUND(email.value, 'email');
55
+ }
56
+ return user;
57
+ }
58
+ catch (error) {
59
+ if (isBaseError(error))
60
+ throw error;
61
+ const err = error;
62
+ this.logger.error(`Error while finding user by email hash ${calculateHash(email.value).slice(0, 8)}: ${err.message}`);
63
+ throw DATABASE_ERROR(`finding user by email ${email.value}`, err.message);
64
+ }
65
+ }
66
+ async findByRna(rna) {
67
+ try {
68
+ const user = await this.userRepository.findByRna(rna.value);
69
+ if (!user) {
70
+ this.logger.warn(`User with rna ${rna.value} not found`);
71
+ throw USER_NOT_FOUND(rna.value, 'rna');
72
+ }
73
+ return user;
74
+ }
75
+ catch (error) {
76
+ if (isBaseError(error))
77
+ throw error;
78
+ const err = error;
79
+ this.logger.error(`Error while finding user by rna ${rna.value}: ${err.message}`);
80
+ throw DATABASE_ERROR(`finding user by rna ${rna.value}`, err.message);
81
+ }
82
+ }
83
+ async findAll(pagination) {
84
+ try {
85
+ const [users, total] = await this.userRepository.findAll(pagination?.limit, pagination?.offset);
86
+ return new UserListResult(users, total);
87
+ }
88
+ catch (error) {
89
+ if (isBaseError(error))
90
+ throw error;
91
+ const err = error;
92
+ this.logger.error(`Error while finding all users: ${err.message}`);
93
+ throw DATABASE_ERROR('finding all users', err.message);
94
+ }
95
+ }
96
+ async update(id, input) {
97
+ try {
98
+ if (input.rna != null && !UserEntity.isValidRna(input.rna)) {
99
+ this.logger.warn(`Invalid RNA ${input.rna} for user update with id ${id.value}`);
100
+ throw INVALID_RNA(input.rna);
101
+ }
102
+ const updatedUser = await this.userRepository.update(id.value, {
103
+ pseudo: input.pseudo,
104
+ bio: input.bio,
105
+ logoPath: input.logoPath,
106
+ rna: input.rna,
107
+ });
108
+ if (!updatedUser) {
109
+ this.logger.warn(`User with id ${id.value} not found for update`);
110
+ throw USER_NOT_FOUND(id.value);
111
+ }
112
+ return updatedUser;
113
+ }
114
+ catch (error) {
115
+ if (isBaseError(error))
116
+ throw error;
117
+ const err = error;
118
+ this.logger.error(`Error while updating user with id ${id.value}: ${err.message}`);
119
+ throw DATABASE_ERROR(`updating user with id ${id.value}`, err.message);
120
+ }
121
+ }
122
+ async delete(id) {
123
+ try {
124
+ const deleted = await this.userRepository.delete(id.value);
125
+ if (!deleted) {
126
+ this.logger.warn(`User with id ${id.value} not found for deletion`);
127
+ throw USER_NOT_FOUND(id.value);
128
+ }
129
+ }
130
+ catch (error) {
131
+ if (isBaseError(error))
132
+ throw error;
133
+ const err = error;
134
+ this.logger.error(`Error while deleting user with id ${id.value}: ${err.message}`);
135
+ throw DATABASE_ERROR(`deleting user with id ${id.value}`, err.message);
136
+ }
137
+ }
138
+ async addBadgeToUser(userId, badgeId) {
139
+ try {
140
+ const user = await this.findById(userId);
141
+ await this.badgeService.findById(badgeId);
142
+ if (user.badges.some((b) => b.id === badgeId.value)) {
143
+ this.logger.warn(`User with id ${userId.value} already has badge with id ${badgeId.value}`);
144
+ throw USER_ALREADY_HAS_BADGE(userId.value, badgeId.value);
145
+ }
146
+ await this.userRepository.addBadgeToUser(userId.value, badgeId.value);
147
+ }
148
+ catch (error) {
149
+ if (isBaseError(error))
150
+ throw error;
151
+ const err = error;
152
+ this.logger.error(`Error while adding badge ${badgeId.value} to user ${userId.value}: ${err.message}`);
153
+ throw DATABASE_ERROR(`adding badge ${badgeId.value} to user ${userId.value}`, err.message);
154
+ }
155
+ }
156
+ async removeBadgeFromUser(userId, badgeId) {
157
+ try {
158
+ const user = await this.findById(userId);
159
+ if (!user.badges.some((badge) => badge.id === badgeId.value)) {
160
+ this.logger.warn(`User with id ${userId.value} does not have badge with id ${badgeId.value} for removal`);
161
+ throw USER_BADGE_NOT_FOUND(userId.value, badgeId.value);
162
+ }
163
+ await this.userRepository.removeBadgeFromUser(userId.value, badgeId.value);
164
+ }
165
+ catch (error) {
166
+ if (isBaseError(error))
167
+ throw error;
168
+ const err = error;
169
+ this.logger.error(`Error while removing badge ${badgeId.value} from user ${userId.value}: ${err.message}`);
170
+ throw DATABASE_ERROR(`removing badge ${badgeId.value} from user ${userId.value}`, err.message);
171
+ }
172
+ }
173
+ async incrementImpactScore(userId, score) {
174
+ try {
175
+ if (score.value <= 0) {
176
+ this.logger.warn(`Invalid score increment of ${score.value.toString()} for user ${userId.value}`);
177
+ throw INVALID_SCORE_INCREMENT(score.value);
178
+ }
179
+ await this.userRepository.incrementImpactScore(userId.value, score.value);
180
+ }
181
+ catch (error) {
182
+ if (isBaseError(error))
183
+ throw error;
184
+ const err = error;
185
+ this.logger.error(`Error while incrementing impact score of user ${userId.value} by ${score.value.toString()}: ${err.message}`);
186
+ throw DATABASE_ERROR(`incrementing impact score of user ${userId.value} by ${score.value.toString()}`, err.message);
187
+ }
188
+ }
189
+ };
190
+ UserService = UserService_1 = __decorate([
191
+ Injectable(),
192
+ __param(0, Inject(PostgresUserRepository)),
193
+ __metadata("design:paramtypes", [Object, BadgeService])
194
+ ], UserService);
195
+ export { UserService };
196
+ //# sourceMappingURL=user.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user.service.js","sourceRoot":"","sources":["../../src/services/user.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { BadgeEntity } from '../../../entities/badge.entity.js';
2
+ import { CreateBadgeInput, UpdateBadgeInput } from '../../../value-objects/index.js';
3
+ export declare class BadgeFactory {
4
+ static build(overrides?: Partial<BadgeEntity>): BadgeEntity;
5
+ static buildMany(count: number, overrides?: Partial<BadgeEntity>): BadgeEntity[];
6
+ static buildInput(overrides?: {
7
+ name?: string;
8
+ slug?: string;
9
+ description?: string;
10
+ iconPath?: string;
11
+ }): CreateBadgeInput;
12
+ static buildUpdateInput(overrides?: {
13
+ name?: string;
14
+ slug?: string;
15
+ description?: string;
16
+ iconPath?: string;
17
+ }): UpdateBadgeInput;
18
+ }
19
+ //# sourceMappingURL=badge.factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"badge.factory.d.ts","sourceRoot":"","sources":["../../../../src/test/__test-utils__/factories/badge.factory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAErF,qBAAa,YAAY;IACvB,MAAM,CAAC,KAAK,CAAC,SAAS,GAAE,OAAO,CAAC,WAAW,CAAM,GAAG,WAAW;IAY/D,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,GAAE,OAAO,CAAC,WAAW,CAAM,GAAG,WAAW,EAAE;IAIpF,MAAM,CAAC,UAAU,CACf,SAAS,GAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAO,GACxF,gBAAgB;IAUnB,MAAM,CAAC,gBAAgB,CACrB,SAAS,GAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAO,GACxF,gBAAgB;CAGpB"}
@@ -0,0 +1,27 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ import { BadgeEntity } from '../../../entities/badge.entity.js';
3
+ import { CreateBadgeInput, UpdateBadgeInput } from '../../../value-objects/index.js';
4
+ export class BadgeFactory {
5
+ static build(overrides = {}) {
6
+ const uid = randomUUID().slice(0, 8);
7
+ return Object.assign(new BadgeEntity(), {
8
+ id: randomUUID(),
9
+ name: `Badge ${uid}`,
10
+ slug: `badge-${uid}`,
11
+ description: `Description for badge ${uid}`,
12
+ iconPath: undefined,
13
+ ...overrides,
14
+ });
15
+ }
16
+ static buildMany(count, overrides = {}) {
17
+ return Array.from({ length: count }, () => BadgeFactory.build(overrides));
18
+ }
19
+ static buildInput(overrides = {}) {
20
+ const uid = randomUUID().slice(0, 8);
21
+ return new CreateBadgeInput(overrides.name ?? `Badge ${uid}`, overrides.slug ?? `badge-${uid}`, overrides.description ?? `Description for badge ${uid}`, overrides.iconPath);
22
+ }
23
+ static buildUpdateInput(overrides = {}) {
24
+ return new UpdateBadgeInput(overrides);
25
+ }
26
+ }
27
+ //# sourceMappingURL=badge.factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"badge.factory.js","sourceRoot":"","sources":["../../../../src/test/__test-utils__/factories/badge.factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAErF,MAAM,OAAO,YAAY;IACvB,MAAM,CAAC,KAAK,CAAC,YAAkC,EAAE;QAC/C,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACrC,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,WAAW,EAAE,EAAE;YACtC,EAAE,EAAE,UAAU,EAAE;YAChB,IAAI,EAAE,SAAS,GAAG,EAAE;YACpB,IAAI,EAAE,SAAS,GAAG,EAAE;YACpB,WAAW,EAAE,yBAAyB,GAAG,EAAE;YAC3C,QAAQ,EAAE,SAAS;YACnB,GAAG,SAAS;SACb,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,SAAS,CAAC,KAAa,EAAE,YAAkC,EAAE;QAClE,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;IAC5E,CAAC;IAED,MAAM,CAAC,UAAU,CACf,YAAuF,EAAE;QAEzF,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACrC,OAAO,IAAI,gBAAgB,CACzB,SAAS,CAAC,IAAI,IAAI,SAAS,GAAG,EAAE,EAChC,SAAS,CAAC,IAAI,IAAI,SAAS,GAAG,EAAE,EAChC,SAAS,CAAC,WAAW,IAAI,yBAAyB,GAAG,EAAE,EACvD,SAAS,CAAC,QAAQ,CACnB,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,gBAAgB,CACrB,YAAuF,EAAE;QAEzF,OAAO,IAAI,gBAAgB,CAAC,SAAS,CAAC,CAAC;IACzC,CAAC;CACF"}
@@ -0,0 +1,16 @@
1
+ import { SignUpInput, LoginInput } from '../../../value-objects/index.js';
2
+ export declare class CommandsFactory {
3
+ static buildSignUpCommand(overrides?: {
4
+ email?: string;
5
+ password?: string;
6
+ pseudo?: string;
7
+ bio?: string;
8
+ logoPath?: string;
9
+ rna?: string;
10
+ }): SignUpInput;
11
+ static buildLoginCommand(overrides?: {
12
+ email?: string;
13
+ password?: string;
14
+ }): LoginInput;
15
+ }
16
+ //# sourceMappingURL=commands.factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands.factory.d.ts","sourceRoot":"","sources":["../../../../src/test/__test-utils__/factories/commands.factory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAE1E,qBAAa,eAAe;IAC1B,MAAM,CAAC,kBAAkB,CACvB,SAAS,GAAE;QACT,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,GAAG,CAAC,EAAE,MAAM,CAAC;KACT,GACL,WAAW;IAYd,MAAM,CAAC,iBAAiB,CAAC,SAAS,GAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,UAAU;CAM5F"}
@@ -0,0 +1,12 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ import { SignUpInput, LoginInput } from '../../../value-objects/index.js';
3
+ export class CommandsFactory {
4
+ static buildSignUpCommand(overrides = {}) {
5
+ const uid = randomUUID().slice(0, 8);
6
+ return new SignUpInput(overrides.email ?? `user-${uid}@example.com`, overrides.password ?? 'SecurePassword123!', overrides.pseudo ?? `user-${uid}`, overrides.bio ?? `Bio for user ${uid}`, overrides.logoPath, overrides.rna);
7
+ }
8
+ static buildLoginCommand(overrides = {}) {
9
+ return new LoginInput(overrides.email ?? 'user@example.com', overrides.password ?? 'SecurePassword123!');
10
+ }
11
+ }
12
+ //# sourceMappingURL=commands.factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands.factory.js","sourceRoot":"","sources":["../../../../src/test/__test-utils__/factories/commands.factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAE1E,MAAM,OAAO,eAAe;IAC1B,MAAM,CAAC,kBAAkB,CACvB,YAOI,EAAE;QAEN,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACrC,OAAO,IAAI,WAAW,CACpB,SAAS,CAAC,KAAK,IAAI,QAAQ,GAAG,cAAc,EAC5C,SAAS,CAAC,QAAQ,IAAI,oBAAoB,EAC1C,SAAS,CAAC,MAAM,IAAI,QAAQ,GAAG,EAAE,EACjC,SAAS,CAAC,GAAG,IAAI,gBAAgB,GAAG,EAAE,EACtC,SAAS,CAAC,QAAQ,EAClB,SAAS,CAAC,GAAG,CACd,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,iBAAiB,CAAC,YAAmD,EAAE;QAC5E,OAAO,IAAI,UAAU,CACnB,SAAS,CAAC,KAAK,IAAI,kBAAkB,EACrC,SAAS,CAAC,QAAQ,IAAI,oBAAoB,CAC3C,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,8 @@
1
+ import { UserEntity } from '../../../entities/user.entity.js';
2
+ export declare const generateRandomRna: () => string;
3
+ export declare class UserFactory {
4
+ static build(overrides?: Partial<UserEntity>): UserEntity;
5
+ static buildMany(count: number, overrides?: Partial<UserEntity>): UserEntity[];
6
+ static buildInput(overrides?: Partial<Omit<UserEntity, 'id'>>): Omit<UserEntity, 'id'>;
7
+ }
8
+ //# sourceMappingURL=user.factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user.factory.d.ts","sourceRoot":"","sources":["../../../../src/test/__test-utils__/factories/user.factory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AAG9D,eAAO,MAAM,iBAAiB,QAAO,MAGpC,CAAC;AAEF,qBAAa,WAAW;IACtB,MAAM,CAAC,KAAK,CAAC,SAAS,GAAE,OAAO,CAAC,UAAU,CAAM,GAAG,UAAU;IAgB7D,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,GAAE,OAAO,CAAC,UAAU,CAAM,GAAG,UAAU,EAAE;IAIlF,MAAM,CAAC,UAAU,CAAC,SAAS,GAAE,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAM,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC;CAc3F"}
@@ -0,0 +1,42 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ import { UserEntity } from '../../../entities/user.entity.js';
3
+ import { UserRoles } from '@volontariapp/shared';
4
+ export const generateRandomRna = () => {
5
+ const digits = Math.random().toString().slice(2, 11);
6
+ return `W${digits.padEnd(9, '0')}`;
7
+ };
8
+ export class UserFactory {
9
+ static build(overrides = {}) {
10
+ const uid = randomUUID().slice(0, 8);
11
+ return Object.assign(new UserEntity(), {
12
+ id: randomUUID(),
13
+ email: `user-${uid}@example.com`,
14
+ pseudo: `user-${uid}`,
15
+ logoPath: undefined,
16
+ rna: `W${generateRandomRna()}`,
17
+ bio: `Bio for user ${uid}`,
18
+ role: UserRoles.VOLUNTEER,
19
+ totalImpactScore: 0,
20
+ badges: [],
21
+ ...overrides,
22
+ });
23
+ }
24
+ static buildMany(count, overrides = {}) {
25
+ return Array.from({ length: count }, () => UserFactory.build(overrides));
26
+ }
27
+ static buildInput(overrides = {}) {
28
+ const uid = randomUUID().slice(0, 8);
29
+ return {
30
+ email: `user-${uid}@example.com`,
31
+ pseudo: `user-${uid}`,
32
+ logoPath: undefined,
33
+ rna: `W${generateRandomRna()}`,
34
+ bio: `Bio for user ${uid}`,
35
+ role: UserRoles.VOLUNTEER,
36
+ totalImpactScore: 0,
37
+ badges: [],
38
+ ...overrides,
39
+ };
40
+ }
41
+ }
42
+ //# sourceMappingURL=user.factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user.factory.js","sourceRoot":"","sources":["../../../../src/test/__test-utils__/factories/user.factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAW,EAAE;IAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACrD,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;AACrC,CAAC,CAAC;AAEF,MAAM,OAAO,WAAW;IACtB,MAAM,CAAC,KAAK,CAAC,YAAiC,EAAE;QAC9C,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACrC,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,UAAU,EAAE,EAAE;YACrC,EAAE,EAAE,UAAU,EAAE;YAChB,KAAK,EAAE,QAAQ,GAAG,cAAc;YAChC,MAAM,EAAE,QAAQ,GAAG,EAAE;YACrB,QAAQ,EAAE,SAAS;YACnB,GAAG,EAAE,IAAI,iBAAiB,EAAE,EAAE;YAC9B,GAAG,EAAE,gBAAgB,GAAG,EAAE;YAC1B,IAAI,EAAE,SAAS,CAAC,SAAS;YACzB,gBAAgB,EAAE,CAAC;YACnB,MAAM,EAAE,EAAE;YACV,GAAG,SAAS;SACb,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,SAAS,CAAC,KAAa,EAAE,YAAiC,EAAE;QACjE,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;IAC3E,CAAC;IAED,MAAM,CAAC,UAAU,CAAC,YAA6C,EAAE;QAC/D,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACrC,OAAO;YACL,KAAK,EAAE,QAAQ,GAAG,cAAc;YAChC,MAAM,EAAE,QAAQ,GAAG,EAAE;YACrB,QAAQ,EAAE,SAAS;YACnB,GAAG,EAAE,IAAI,iBAAiB,EAAE,EAAE;YAC9B,GAAG,EAAE,gBAAgB,GAAG,EAAE;YAC1B,IAAI,EAAE,SAAS,CAAC,SAAS;YACzB,gBAAgB,EAAE,CAAC;YACnB,MAAM,EAAE,EAAE;YACV,GAAG,SAAS;SACb,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,4 @@
1
+ import { jest } from '@jest/globals';
2
+ import type { IBadgeRepository } from '../../../repositories/interfaces/badge.repository.js';
3
+ export declare const createBadgeRepositoryMock: () => jest.Mocked<IBadgeRepository>;
4
+ //# sourceMappingURL=badge.repository.mock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"badge.repository.mock.d.ts","sourceRoot":"","sources":["../../../../src/test/__test-utils__/mocks/badge.repository.mock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sDAAsD,CAAC;AAE7F,eAAO,MAAM,yBAAyB,QAAO,IAAI,CAAC,MAAM,CAAC,gBAAgB,CASzB,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { jest } from '@jest/globals';
2
+ export const createBadgeRepositoryMock = () => ({
3
+ findById: jest.fn(),
4
+ findManyByIds: jest.fn(),
5
+ findBySlug: jest.fn(),
6
+ findAll: jest.fn(),
7
+ create: jest.fn(),
8
+ update: jest.fn(),
9
+ delete: jest.fn(),
10
+ });
11
+ //# sourceMappingURL=badge.repository.mock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"badge.repository.mock.js","sourceRoot":"","sources":["../../../../src/test/__test-utils__/mocks/badge.repository.mock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAGrC,MAAM,CAAC,MAAM,yBAAyB,GAAG,GAAkC,EAAE,CAC3E,CAAC;IACC,QAAQ,EAAE,IAAI,CAAC,EAAE,EAAE;IACnB,aAAa,EAAE,IAAI,CAAC,EAAE,EAAE;IACxB,UAAU,EAAE,IAAI,CAAC,EAAE,EAAE;IACrB,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE;IAClB,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE;IACjB,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE;IACjB,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE;CAClB,CAA6C,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { jest } from '@jest/globals';
2
+ import type { IUserRepository } from '../../../repositories/interfaces/user.repository.js';
3
+ export declare const createUserRepositoryMock: () => jest.Mocked<IUserRepository>;
4
+ //# sourceMappingURL=user.repository.mock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user.repository.mock.d.ts","sourceRoot":"","sources":["../../../../src/test/__test-utils__/mocks/user.repository.mock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qDAAqD,CAAC;AAE3F,eAAO,MAAM,wBAAwB,QAAO,IAAI,CAAC,MAAM,CAAC,eAAe,CAcxB,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { jest } from '@jest/globals';
2
+ export const createUserRepositoryMock = () => ({
3
+ findById: jest.fn(),
4
+ findByEmail: jest.fn(),
5
+ findByRna: jest.fn(),
6
+ findAll: jest.fn(),
7
+ create: jest.fn(),
8
+ update: jest.fn(),
9
+ delete: jest.fn(),
10
+ addBadgeToUser: jest.fn(),
11
+ removeBadgeFromUser: jest.fn(),
12
+ incrementImpactScore: jest.fn(),
13
+ createWithHashedPassword: jest.fn(),
14
+ findPasswordHashByEmail: jest.fn(),
15
+ });
16
+ //# sourceMappingURL=user.repository.mock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user.repository.mock.js","sourceRoot":"","sources":["../../../../src/test/__test-utils__/mocks/user.repository.mock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAGrC,MAAM,CAAC,MAAM,wBAAwB,GAAG,GAAiC,EAAE,CACzE,CAAC;IACC,QAAQ,EAAE,IAAI,CAAC,EAAE,EAAE;IACnB,WAAW,EAAE,IAAI,CAAC,EAAE,EAAE;IACtB,SAAS,EAAE,IAAI,CAAC,EAAE,EAAE;IACpB,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE;IAClB,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE;IACjB,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE;IACjB,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE;IACjB,cAAc,EAAE,IAAI,CAAC,EAAE,EAAE;IACzB,mBAAmB,EAAE,IAAI,CAAC,EAAE,EAAE;IAC9B,oBAAoB,EAAE,IAAI,CAAC,EAAE,EAAE;IAC/B,wBAAwB,EAAE,IAAI,CAAC,EAAE,EAAE;IACnC,uBAAuB,EAAE,IAAI,CAAC,EAAE,EAAE;CACnC,CAA4C,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { Repository } from '@volontariapp/database';
2
+ import { DataSource } from 'typeorm';
3
+ export declare const testDataSource: DataSource;
4
+ export declare const getTestRepository: <T extends object>(ModelClass: new () => T) => Repository<T>;
5
+ export declare const initializeTestDb: () => Promise<void>;
6
+ export declare const closeTestDb: () => Promise<void>;
7
+ export declare const truncateAll: () => Promise<void>;
8
+ //# sourceMappingURL=data-source.d.ts.map