@explorins/pers-shared 2.1.83 → 2.1.85

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 (33) hide show
  1. package/dist/cjs/shared-lib/dto/analytics/business-ranking-analytics.dto.d.ts +57 -0
  2. package/dist/cjs/shared-lib/dto/analytics/business-ranking-analytics.dto.d.ts.map +1 -0
  3. package/dist/cjs/shared-lib/dto/analytics/business-ranking-analytics.dto.js +226 -0
  4. package/dist/cjs/shared-lib/dto/analytics/business-ranking-analytics.dto.js.map +1 -0
  5. package/dist/cjs/shared-lib/dto/analytics/index.d.ts +2 -0
  6. package/dist/cjs/shared-lib/dto/analytics/index.d.ts.map +1 -1
  7. package/dist/cjs/shared-lib/dto/analytics/index.js +2 -0
  8. package/dist/cjs/shared-lib/dto/analytics/index.js.map +1 -1
  9. package/dist/cjs/shared-lib/dto/analytics/retention-analytics.dto.d.ts +54 -0
  10. package/dist/cjs/shared-lib/dto/analytics/retention-analytics.dto.d.ts.map +1 -0
  11. package/dist/cjs/shared-lib/dto/analytics/retention-analytics.dto.js +205 -0
  12. package/dist/cjs/shared-lib/dto/analytics/retention-analytics.dto.js.map +1 -0
  13. package/dist/cjs/shared-lib/dto/analytics/user-ranking-analytics.dto.d.ts +2 -1
  14. package/dist/cjs/shared-lib/dto/analytics/user-ranking-analytics.dto.d.ts.map +1 -1
  15. package/dist/cjs/shared-lib/dto/analytics/user-ranking-analytics.dto.js +9 -1
  16. package/dist/cjs/shared-lib/dto/analytics/user-ranking-analytics.dto.js.map +1 -1
  17. package/dist/esm/shared-lib/dto/analytics/business-ranking-analytics.dto.d.ts +57 -0
  18. package/dist/esm/shared-lib/dto/analytics/business-ranking-analytics.dto.d.ts.map +1 -0
  19. package/dist/esm/shared-lib/dto/analytics/business-ranking-analytics.dto.js +198 -0
  20. package/dist/esm/shared-lib/dto/analytics/business-ranking-analytics.dto.js.map +1 -0
  21. package/dist/esm/shared-lib/dto/analytics/index.d.ts +2 -0
  22. package/dist/esm/shared-lib/dto/analytics/index.d.ts.map +1 -1
  23. package/dist/esm/shared-lib/dto/analytics/index.js +2 -0
  24. package/dist/esm/shared-lib/dto/analytics/index.js.map +1 -1
  25. package/dist/esm/shared-lib/dto/analytics/retention-analytics.dto.d.ts +54 -0
  26. package/dist/esm/shared-lib/dto/analytics/retention-analytics.dto.d.ts.map +1 -0
  27. package/dist/esm/shared-lib/dto/analytics/retention-analytics.dto.js +178 -0
  28. package/dist/esm/shared-lib/dto/analytics/retention-analytics.dto.js.map +1 -0
  29. package/dist/esm/shared-lib/dto/analytics/user-ranking-analytics.dto.d.ts +2 -1
  30. package/dist/esm/shared-lib/dto/analytics/user-ranking-analytics.dto.d.ts.map +1 -1
  31. package/dist/esm/shared-lib/dto/analytics/user-ranking-analytics.dto.js +8 -1
  32. package/dist/esm/shared-lib/dto/analytics/user-ranking-analytics.dto.js.map +1 -1
  33. package/package.json +1 -1
@@ -0,0 +1,57 @@
1
+ import { SortOrder } from '../../..';
2
+ import type { NativeTokenType } from '../../types/native-token.type';
3
+ import { BaseAnalyticsMetadata } from './base-analytics.dto';
4
+ /**
5
+ * BUSINESS RANKING ANALYTICS DTOs
6
+ *
7
+ * Domain: Analytics (Cross-Domain Query)
8
+ * Purpose: Server-side aggregation of business transaction rankings
9
+ *
10
+ * Replaces:
11
+ * - Dual queries (modern + legacy business transactions)
12
+ * - Client-side merging logic in business-balances.component.ts
13
+ *
14
+ * Performance Impact:
15
+ * - 2 API calls → 1 API call (50% reduction)
16
+ * - ~60 lines removed from frontend
17
+ * - Server-side JOIN optimization
18
+ */
19
+ export declare class BusinessRankingFiltersDTO {
20
+ businessId?: string;
21
+ tokenType?: NativeTokenType;
22
+ }
23
+ export declare class BusinessRankingAnalyticsRequestDTO {
24
+ filters?: BusinessRankingFiltersDTO;
25
+ sortBy?: 'totalTransactions' | 'tokenReceived' | 'businessId' | 'businessName';
26
+ sortOrder?: SortOrder;
27
+ limit?: number;
28
+ startDate?: Date;
29
+ endDate?: Date;
30
+ }
31
+ export declare class BusinessRankingResultItemDTO {
32
+ businessId: string | null;
33
+ businessName: string | null;
34
+ displayName: string | null;
35
+ accountAddress: string | null;
36
+ totalTransactions: number;
37
+ tokenReceived: number;
38
+ hasLegacyTransactions?: boolean;
39
+ }
40
+ export declare class BusinessRankingAnalyticsResponseDTO {
41
+ results: BusinessRankingResultItemDTO[];
42
+ totalBusinesses: number;
43
+ metadata: BaseAnalyticsMetadata & {
44
+ /**
45
+ * Token type used for filtering (if provided in request)
46
+ */
47
+ tokenType?: NativeTokenType;
48
+ /**
49
+ * Sort configuration applied
50
+ */
51
+ sorting?: {
52
+ sortBy: string;
53
+ sortOrder: SortOrder;
54
+ };
55
+ };
56
+ }
57
+ //# sourceMappingURL=business-ranking-analytics.dto.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"business-ranking-analytics.dto.d.ts","sourceRoot":"","sources":["../../../../../src/shared-lib/dto/analytics/business-ranking-analytics.dto.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAErE,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAE7D;;;;;;;;;;;;;;GAcG;AAIH,qBAAa,yBAAyB;IASpC,UAAU,CAAC,EAAE,MAAM,CAAC;IASpB,SAAS,CAAC,EAAE,eAAe,CAAC;CAC7B;AAID,qBAAa,kCAAkC;IAQ7C,OAAO,CAAC,EAAE,yBAAyB,CAAC;IAUpC,MAAM,CAAC,EAAE,mBAAmB,GAAG,eAAe,GAAG,YAAY,GAAG,cAAc,CAAC;IAU/E,SAAS,CAAC,EAAE,SAAS,CAAC;IAatB,KAAK,CAAC,EAAE,MAAM,CAAC;IAQf,SAAS,CAAC,EAAE,IAAI,CAAC;IAQjB,OAAO,CAAC,EAAE,IAAI,CAAC;CAChB;AAID,qBAAa,4BAA4B;IAMvC,UAAU,EAAG,MAAM,GAAG,IAAI,CAAC;IAO3B,YAAY,EAAG,MAAM,GAAG,IAAI,CAAC;IAO7B,WAAW,EAAG,MAAM,GAAG,IAAI,CAAC;IAO5B,cAAc,EAAG,MAAM,GAAG,IAAI,CAAC;IAM/B,iBAAiB,EAAG,MAAM,CAAC;IAM3B,aAAa,EAAG,MAAM,CAAC;IAMvB,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC;AAID,qBAAa,mCAAmC;IAK9C,OAAO,EAAG,4BAA4B,EAAE,CAAC;IAMzC,eAAe,EAAG,MAAM,CAAC;IAMzB,QAAQ,EAAG,qBAAqB,GAAG;QACjC;;WAEG;QACH,SAAS,CAAC,EAAE,eAAe,CAAC;QAE5B;;WAEG;QACH,OAAO,CAAC,EAAE;YACR,MAAM,EAAE,MAAM,CAAC;YACf,SAAS,EAAE,SAAS,CAAC;SACtB,CAAC;KACH,CAAC;CACH"}
@@ -0,0 +1,226 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ 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;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.BusinessRankingAnalyticsResponseDTO = exports.BusinessRankingResultItemDTO = exports.BusinessRankingAnalyticsRequestDTO = exports.BusinessRankingFiltersDTO = void 0;
13
+ const class_validator_1 = require("class-validator");
14
+ const class_transformer_1 = require("class-transformer");
15
+ const swagger_1 = require("@nestjs/swagger");
16
+ const __1 = require("../../..");
17
+ const native_token_type_1 = require("../../types/native-token.type");
18
+ /**
19
+ * BUSINESS RANKING ANALYTICS DTOs
20
+ *
21
+ * Domain: Analytics (Cross-Domain Query)
22
+ * Purpose: Server-side aggregation of business transaction rankings
23
+ *
24
+ * Replaces:
25
+ * - Dual queries (modern + legacy business transactions)
26
+ * - Client-side merging logic in business-balances.component.ts
27
+ *
28
+ * Performance Impact:
29
+ * - 2 API calls → 1 API call (50% reduction)
30
+ * - ~60 lines removed from frontend
31
+ * - Server-side JOIN optimization
32
+ */
33
+ // ========== FILTERS ==========
34
+ class BusinessRankingFiltersDTO {
35
+ businessId;
36
+ tokenType;
37
+ }
38
+ exports.BusinessRankingFiltersDTO = BusinessRankingFiltersDTO;
39
+ __decorate([
40
+ (0, swagger_1.ApiPropertyOptional)({
41
+ description: 'Filter to specific business by ID',
42
+ type: String,
43
+ format: 'uuid',
44
+ example: 'biz-uuid-123'
45
+ }),
46
+ (0, class_validator_1.IsOptional)(),
47
+ (0, class_validator_1.IsString)(),
48
+ __metadata("design:type", String)
49
+ ], BusinessRankingFiltersDTO.prototype, "businessId", void 0);
50
+ __decorate([
51
+ (0, swagger_1.ApiPropertyOptional)({
52
+ description: 'Filter by specific token type',
53
+ enum: native_token_type_1.NativeTokenTypes,
54
+ example: native_token_type_1.NativeTokenTypes.ERC721
55
+ }),
56
+ (0, class_validator_1.IsOptional)(),
57
+ (0, class_validator_1.IsEnum)(native_token_type_1.NativeTokenTypes),
58
+ __metadata("design:type", String)
59
+ ], BusinessRankingFiltersDTO.prototype, "tokenType", void 0);
60
+ // ========== REQUEST ==========
61
+ class BusinessRankingAnalyticsRequestDTO {
62
+ filters;
63
+ sortBy;
64
+ sortOrder;
65
+ limit;
66
+ startDate;
67
+ endDate;
68
+ }
69
+ exports.BusinessRankingAnalyticsRequestDTO = BusinessRankingAnalyticsRequestDTO;
70
+ __decorate([
71
+ (0, swagger_1.ApiPropertyOptional)({
72
+ description: 'Filters for business ranking query',
73
+ type: BusinessRankingFiltersDTO
74
+ }),
75
+ (0, class_validator_1.IsOptional)(),
76
+ (0, class_validator_1.ValidateNested)(),
77
+ (0, class_transformer_1.Type)(() => BusinessRankingFiltersDTO),
78
+ __metadata("design:type", BusinessRankingFiltersDTO)
79
+ ], BusinessRankingAnalyticsRequestDTO.prototype, "filters", void 0);
80
+ __decorate([
81
+ (0, swagger_1.ApiPropertyOptional)({
82
+ description: 'Field to sort results by',
83
+ enum: ['totalTransactions', 'tokenReceived', 'businessId', 'businessName'],
84
+ default: 'totalTransactions',
85
+ example: 'totalTransactions'
86
+ }),
87
+ (0, class_validator_1.IsOptional)(),
88
+ (0, class_validator_1.IsString)(),
89
+ __metadata("design:type", String)
90
+ ], BusinessRankingAnalyticsRequestDTO.prototype, "sortBy", void 0);
91
+ __decorate([
92
+ (0, swagger_1.ApiPropertyOptional)({
93
+ description: 'Sort order (ASC or DESC)',
94
+ enum: __1.SortOrder,
95
+ default: __1.SortOrder.DESC,
96
+ example: __1.SortOrder.DESC
97
+ }),
98
+ (0, class_validator_1.IsOptional)(),
99
+ (0, class_validator_1.IsEnum)(__1.SortOrder),
100
+ __metadata("design:type", String)
101
+ ], BusinessRankingAnalyticsRequestDTO.prototype, "sortOrder", void 0);
102
+ __decorate([
103
+ (0, swagger_1.ApiPropertyOptional)({
104
+ description: 'Maximum number of results to return',
105
+ minimum: 1,
106
+ maximum: 1000,
107
+ default: 50,
108
+ example: 50
109
+ }),
110
+ (0, class_validator_1.IsOptional)(),
111
+ (0, class_validator_1.IsInt)(),
112
+ (0, class_validator_1.Min)(1),
113
+ (0, class_validator_1.Max)(1000),
114
+ __metadata("design:type", Number)
115
+ ], BusinessRankingAnalyticsRequestDTO.prototype, "limit", void 0);
116
+ __decorate([
117
+ (0, swagger_1.ApiPropertyOptional)({
118
+ description: 'Start date for filtering transactions (ISO 8601)',
119
+ example: '2026-01-01T00:00:00Z'
120
+ }),
121
+ (0, class_validator_1.IsOptional)(),
122
+ (0, class_validator_1.IsDateString)(),
123
+ __metadata("design:type", Date)
124
+ ], BusinessRankingAnalyticsRequestDTO.prototype, "startDate", void 0);
125
+ __decorate([
126
+ (0, swagger_1.ApiPropertyOptional)({
127
+ description: 'End date for filtering transactions (ISO 8601)',
128
+ example: '2026-02-01T00:00:00Z'
129
+ }),
130
+ (0, class_validator_1.IsOptional)(),
131
+ (0, class_validator_1.IsDateString)(),
132
+ __metadata("design:type", Date)
133
+ ], BusinessRankingAnalyticsRequestDTO.prototype, "endDate", void 0);
134
+ // ========== RESULT ITEM ==========
135
+ class BusinessRankingResultItemDTO {
136
+ businessId;
137
+ businessName;
138
+ displayName;
139
+ accountAddress;
140
+ totalTransactions;
141
+ tokenReceived;
142
+ hasLegacyTransactions;
143
+ }
144
+ exports.BusinessRankingResultItemDTO = BusinessRankingResultItemDTO;
145
+ __decorate([
146
+ (0, swagger_1.ApiProperty)({
147
+ description: 'Business UUID (null for unidentified businesses)',
148
+ nullable: true,
149
+ example: '123e4567-e89b-12d3-a456-426614174000'
150
+ }),
151
+ __metadata("design:type", Object)
152
+ ], BusinessRankingResultItemDTO.prototype, "businessId", void 0);
153
+ __decorate([
154
+ (0, swagger_1.ApiProperty)({
155
+ description: 'Business name',
156
+ nullable: true,
157
+ example: 'Acme Coffee Shop'
158
+ }),
159
+ __metadata("design:type", Object)
160
+ ], BusinessRankingResultItemDTO.prototype, "businessName", void 0);
161
+ __decorate([
162
+ (0, swagger_1.ApiProperty)({
163
+ description: 'Business display name',
164
+ nullable: true,
165
+ example: 'Acme Coffee'
166
+ }),
167
+ __metadata("design:type", Object)
168
+ ], BusinessRankingResultItemDTO.prototype, "displayName", void 0);
169
+ __decorate([
170
+ (0, swagger_1.ApiProperty)({
171
+ description: 'Business blockchain account address',
172
+ nullable: true,
173
+ example: '0x1234567890abcdef...'
174
+ }),
175
+ __metadata("design:type", Object)
176
+ ], BusinessRankingResultItemDTO.prototype, "accountAddress", void 0);
177
+ __decorate([
178
+ (0, swagger_1.ApiProperty)({
179
+ description: 'Total number of successful transactions received',
180
+ example: 150
181
+ }),
182
+ __metadata("design:type", Number)
183
+ ], BusinessRankingResultItemDTO.prototype, "totalTransactions", void 0);
184
+ __decorate([
185
+ (0, swagger_1.ApiProperty)({
186
+ description: 'Total token amount received',
187
+ example: 1500.50
188
+ }),
189
+ __metadata("design:type", Number)
190
+ ], BusinessRankingResultItemDTO.prototype, "tokenReceived", void 0);
191
+ __decorate([
192
+ (0, swagger_1.ApiPropertyOptional)({
193
+ description: 'Whether this business has legacy transactions (address-based)',
194
+ example: false
195
+ }),
196
+ __metadata("design:type", Boolean)
197
+ ], BusinessRankingResultItemDTO.prototype, "hasLegacyTransactions", void 0);
198
+ // ========== RESPONSE ==========
199
+ class BusinessRankingAnalyticsResponseDTO {
200
+ results;
201
+ totalBusinesses;
202
+ metadata;
203
+ }
204
+ exports.BusinessRankingAnalyticsResponseDTO = BusinessRankingAnalyticsResponseDTO;
205
+ __decorate([
206
+ (0, swagger_1.ApiProperty)({
207
+ description: 'Array of business ranking results',
208
+ type: [BusinessRankingResultItemDTO]
209
+ }),
210
+ __metadata("design:type", Array)
211
+ ], BusinessRankingAnalyticsResponseDTO.prototype, "results", void 0);
212
+ __decorate([
213
+ (0, swagger_1.ApiProperty)({
214
+ description: 'Total number of businesses in results',
215
+ example: 25
216
+ }),
217
+ __metadata("design:type", Number)
218
+ ], BusinessRankingAnalyticsResponseDTO.prototype, "totalBusinesses", void 0);
219
+ __decorate([
220
+ (0, swagger_1.ApiProperty)({
221
+ description: 'Query metadata',
222
+ type: 'object'
223
+ }),
224
+ __metadata("design:type", Object)
225
+ ], BusinessRankingAnalyticsResponseDTO.prototype, "metadata", void 0);
226
+ //# sourceMappingURL=business-ranking-analytics.dto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"business-ranking-analytics.dto.js","sourceRoot":"","sources":["../../../../../src/shared-lib/dto/analytics/business-ranking-analytics.dto.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,7 @@
1
1
  export * from './base-analytics.dto';
2
+ export * from './business-ranking-analytics.dto';
2
3
  export * from './group-by-expression.dto';
4
+ export * from './retention-analytics.dto';
3
5
  export * from './usage-analytics.dto';
4
6
  export * from './user-ranking-analytics.dto';
5
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/shared-lib/dto/analytics/index.ts"],"names":[],"mappings":"AAEA,cAAc,sBAAsB,CAAC;AACrC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,8BAA8B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/shared-lib/dto/analytics/index.ts"],"names":[],"mappings":"AAEA,cAAc,sBAAsB,CAAC;AACrC,cAAc,kCAAkC,CAAC;AACjD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,8BAA8B,CAAC"}
@@ -15,7 +15,9 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./base-analytics.dto"), exports);
18
+ __exportStar(require("./business-ranking-analytics.dto"), exports);
18
19
  __exportStar(require("./group-by-expression.dto"), exports);
20
+ __exportStar(require("./retention-analytics.dto"), exports);
19
21
  __exportStar(require("./usage-analytics.dto"), exports);
20
22
  __exportStar(require("./user-ranking-analytics.dto"), exports);
21
23
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/shared-lib/dto/analytics/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAEA,uDAAqC;AACrC,4DAA0C;AAC1C,wDAAsC;AACtC,+DAA6C"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/shared-lib/dto/analytics/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAEA,uDAAqC;AACrC,mEAAiD;AACjD,4DAA0C;AAC1C,4DAA0C;AAC1C,wDAAsC;AACtC,+DAA6C"}
@@ -0,0 +1,54 @@
1
+ import type { NativeTokenType } from '../../types/native-token.type';
2
+ import { BaseAnalyticsMetadata } from './base-analytics.dto';
3
+ /**
4
+ * RETENTION ANALYTICS DTOs
5
+ *
6
+ * Domain: Analytics (Cross-Domain Query)
7
+ * Purpose: Server-side monthly retention calculations
8
+ *
9
+ * Replaces:
10
+ * - 13 separate API calls (one per month)
11
+ * - Client-side forkJoin aggregation
12
+ * - Manual month generation logic
13
+ *
14
+ * Performance Impact:
15
+ * - 13 API calls → 1 API call (92% reduction)
16
+ * - ~1350ms → ~105ms load time (92% faster)
17
+ * - ~260KB → ~40KB payload (85% smaller)
18
+ */
19
+ export declare class RetentionAnalyticsFiltersDTO {
20
+ tokenType?: NativeTokenType;
21
+ triggerProcessType?: string;
22
+ }
23
+ export declare class RetentionAnalyticsRequestDTO {
24
+ startMonth?: Date;
25
+ monthsBack?: number;
26
+ filters?: RetentionAnalyticsFiltersDTO;
27
+ }
28
+ export declare class RetentionMonthResultDTO {
29
+ monthKey: string;
30
+ startDate: Date;
31
+ endDate: Date;
32
+ activeUsers: number;
33
+ newUsers: number;
34
+ returningUsers: number;
35
+ retentionRate: number;
36
+ transactionCount: number;
37
+ byTriggerType?: {
38
+ [key: string]: {
39
+ count: number;
40
+ uniqueUsers: number;
41
+ };
42
+ };
43
+ }
44
+ export declare class RetentionAnalyticsResponseDTO {
45
+ results: RetentionMonthResultDTO[];
46
+ totalMonths: number;
47
+ metadata: BaseAnalyticsMetadata & {
48
+ /**
49
+ * Calculation method used for retention analysis
50
+ */
51
+ calculationMethod: 'monthly-cohort';
52
+ };
53
+ }
54
+ //# sourceMappingURL=retention-analytics.dto.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retention-analytics.dto.d.ts","sourceRoot":"","sources":["../../../../../src/shared-lib/dto/analytics/retention-analytics.dto.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAErE,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAE7D;;;;;;;;;;;;;;;GAeG;AAIH,qBAAa,4BAA4B;IAQvC,SAAS,CAAC,EAAE,eAAe,CAAC;IAQ5B,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAID,qBAAa,4BAA4B;IAOvC,UAAU,CAAC,EAAE,IAAI,CAAC;IAalB,UAAU,CAAC,EAAE,MAAM,CAAC;IASpB,OAAO,CAAC,EAAE,4BAA4B,CAAC;CACxC;AAID,qBAAa,uBAAuB;IAKlC,QAAQ,EAAG,MAAM,CAAC;IAMlB,SAAS,EAAG,IAAI,CAAC;IAMjB,OAAO,EAAG,IAAI,CAAC;IAMf,WAAW,EAAG,MAAM,CAAC;IAMrB,QAAQ,EAAG,MAAM,CAAC;IAMlB,cAAc,EAAG,MAAM,CAAC;IAMxB,aAAa,EAAG,MAAM,CAAC;IAMvB,gBAAgB,EAAG,MAAM,CAAC;IAS1B,aAAa,CAAC,EAAE;QACd,CAAC,GAAG,EAAE,MAAM,GAAG;YACb,KAAK,EAAE,MAAM,CAAC;YACd,WAAW,EAAE,MAAM,CAAC;SACrB,CAAC;KACH,CAAC;CACH;AAID,qBAAa,6BAA6B;IAKxC,OAAO,EAAG,uBAAuB,EAAE,CAAC;IAMpC,WAAW,EAAG,MAAM,CAAC;IAMrB,QAAQ,EAAG,qBAAqB,GAAG;QACjC;;WAEG;QACH,iBAAiB,EAAE,gBAAgB,CAAC;KACrC,CAAC;CACH"}
@@ -0,0 +1,205 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ 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;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.RetentionAnalyticsResponseDTO = exports.RetentionMonthResultDTO = exports.RetentionAnalyticsRequestDTO = exports.RetentionAnalyticsFiltersDTO = void 0;
13
+ const class_validator_1 = require("class-validator");
14
+ const class_transformer_1 = require("class-transformer");
15
+ const swagger_1 = require("@nestjs/swagger");
16
+ const native_token_type_1 = require("../../types/native-token.type");
17
+ /**
18
+ * RETENTION ANALYTICS DTOs
19
+ *
20
+ * Domain: Analytics (Cross-Domain Query)
21
+ * Purpose: Server-side monthly retention calculations
22
+ *
23
+ * Replaces:
24
+ * - 13 separate API calls (one per month)
25
+ * - Client-side forkJoin aggregation
26
+ * - Manual month generation logic
27
+ *
28
+ * Performance Impact:
29
+ * - 13 API calls → 1 API call (92% reduction)
30
+ * - ~1350ms → ~105ms load time (92% faster)
31
+ * - ~260KB → ~40KB payload (85% smaller)
32
+ */
33
+ // ========== REQUEST FILTERS ==========
34
+ class RetentionAnalyticsFiltersDTO {
35
+ tokenType;
36
+ triggerProcessType;
37
+ }
38
+ exports.RetentionAnalyticsFiltersDTO = RetentionAnalyticsFiltersDTO;
39
+ __decorate([
40
+ (0, swagger_1.ApiPropertyOptional)({
41
+ description: 'Filter by specific token type',
42
+ enum: native_token_type_1.NativeTokenTypes,
43
+ example: native_token_type_1.NativeTokenTypes.ERC721
44
+ }),
45
+ (0, class_validator_1.IsOptional)(),
46
+ (0, class_validator_1.IsEnum)(native_token_type_1.NativeTokenTypes),
47
+ __metadata("design:type", String)
48
+ ], RetentionAnalyticsFiltersDTO.prototype, "tokenType", void 0);
49
+ __decorate([
50
+ (0, swagger_1.ApiPropertyOptional)({
51
+ description: 'Filter by trigger process type',
52
+ example: 'PURCHASE'
53
+ }),
54
+ (0, class_validator_1.IsOptional)(),
55
+ (0, class_validator_1.IsString)(),
56
+ __metadata("design:type", String)
57
+ ], RetentionAnalyticsFiltersDTO.prototype, "triggerProcessType", void 0);
58
+ // ========== REQUEST ==========
59
+ class RetentionAnalyticsRequestDTO {
60
+ startMonth;
61
+ monthsBack;
62
+ filters;
63
+ }
64
+ exports.RetentionAnalyticsRequestDTO = RetentionAnalyticsRequestDTO;
65
+ __decorate([
66
+ (0, swagger_1.ApiPropertyOptional)({
67
+ description: 'Starting month for retention analysis (defaults to current month)',
68
+ example: '2026-02-01T00:00:00Z'
69
+ }),
70
+ (0, class_validator_1.IsOptional)(),
71
+ (0, class_validator_1.IsDateString)(),
72
+ __metadata("design:type", Date)
73
+ ], RetentionAnalyticsRequestDTO.prototype, "startMonth", void 0);
74
+ __decorate([
75
+ (0, swagger_1.ApiPropertyOptional)({
76
+ description: 'Number of months to analyze (looking backwards)',
77
+ minimum: 1,
78
+ maximum: 24,
79
+ default: 13,
80
+ example: 13
81
+ }),
82
+ (0, class_validator_1.IsOptional)(),
83
+ (0, class_validator_1.IsInt)(),
84
+ (0, class_validator_1.Min)(1),
85
+ (0, class_validator_1.Max)(24),
86
+ __metadata("design:type", Number)
87
+ ], RetentionAnalyticsRequestDTO.prototype, "monthsBack", void 0);
88
+ __decorate([
89
+ (0, swagger_1.ApiPropertyOptional)({
90
+ description: 'Optional filters for retention query',
91
+ type: RetentionAnalyticsFiltersDTO
92
+ }),
93
+ (0, class_validator_1.IsOptional)(),
94
+ (0, class_validator_1.ValidateNested)(),
95
+ (0, class_transformer_1.Type)(() => RetentionAnalyticsFiltersDTO),
96
+ __metadata("design:type", RetentionAnalyticsFiltersDTO)
97
+ ], RetentionAnalyticsRequestDTO.prototype, "filters", void 0);
98
+ // ========== MONTH RESULT ==========
99
+ class RetentionMonthResultDTO {
100
+ monthKey;
101
+ startDate;
102
+ endDate;
103
+ activeUsers;
104
+ newUsers;
105
+ returningUsers;
106
+ retentionRate;
107
+ transactionCount;
108
+ byTriggerType;
109
+ }
110
+ exports.RetentionMonthResultDTO = RetentionMonthResultDTO;
111
+ __decorate([
112
+ (0, swagger_1.ApiProperty)({
113
+ description: 'Month identifier in YYYY-MM format',
114
+ example: '2026-02'
115
+ }),
116
+ __metadata("design:type", String)
117
+ ], RetentionMonthResultDTO.prototype, "monthKey", void 0);
118
+ __decorate([
119
+ (0, swagger_1.ApiProperty)({
120
+ description: 'Start date of the month',
121
+ example: '2026-02-01T00:00:00Z'
122
+ }),
123
+ __metadata("design:type", Date)
124
+ ], RetentionMonthResultDTO.prototype, "startDate", void 0);
125
+ __decorate([
126
+ (0, swagger_1.ApiProperty)({
127
+ description: 'End date of the month',
128
+ example: '2026-03-01T00:00:00Z'
129
+ }),
130
+ __metadata("design:type", Date)
131
+ ], RetentionMonthResultDTO.prototype, "endDate", void 0);
132
+ __decorate([
133
+ (0, swagger_1.ApiProperty)({
134
+ description: 'Total number of users who made transactions in this month',
135
+ example: 450
136
+ }),
137
+ __metadata("design:type", Number)
138
+ ], RetentionMonthResultDTO.prototype, "activeUsers", void 0);
139
+ __decorate([
140
+ (0, swagger_1.ApiProperty)({
141
+ description: 'Number of users making their first transaction ever',
142
+ example: 120
143
+ }),
144
+ __metadata("design:type", Number)
145
+ ], RetentionMonthResultDTO.prototype, "newUsers", void 0);
146
+ __decorate([
147
+ (0, swagger_1.ApiProperty)({
148
+ description: 'Number of users who were active in previous month and returned',
149
+ example: 330
150
+ }),
151
+ __metadata("design:type", Number)
152
+ ], RetentionMonthResultDTO.prototype, "returningUsers", void 0);
153
+ __decorate([
154
+ (0, swagger_1.ApiProperty)({
155
+ description: 'Retention rate: (returningUsers / previousMonth.activeUsers) * 100',
156
+ example: 73.3
157
+ }),
158
+ __metadata("design:type", Number)
159
+ ], RetentionMonthResultDTO.prototype, "retentionRate", void 0);
160
+ __decorate([
161
+ (0, swagger_1.ApiProperty)({
162
+ description: 'Total number of transactions in this month',
163
+ example: 1250
164
+ }),
165
+ __metadata("design:type", Number)
166
+ ], RetentionMonthResultDTO.prototype, "transactionCount", void 0);
167
+ __decorate([
168
+ (0, swagger_1.ApiPropertyOptional)({
169
+ description: 'Breakdown of transactions by trigger type',
170
+ example: {
171
+ PURCHASE: { count: 800, uniqueUsers: 300 },
172
+ REWARD: { count: 450, uniqueUsers: 200 }
173
+ }
174
+ }),
175
+ __metadata("design:type", Object)
176
+ ], RetentionMonthResultDTO.prototype, "byTriggerType", void 0);
177
+ // ========== RESPONSE ==========
178
+ class RetentionAnalyticsResponseDTO {
179
+ results;
180
+ totalMonths;
181
+ metadata;
182
+ }
183
+ exports.RetentionAnalyticsResponseDTO = RetentionAnalyticsResponseDTO;
184
+ __decorate([
185
+ (0, swagger_1.ApiProperty)({
186
+ description: 'Array of monthly retention results (ordered chronologically)',
187
+ type: [RetentionMonthResultDTO]
188
+ }),
189
+ __metadata("design:type", Array)
190
+ ], RetentionAnalyticsResponseDTO.prototype, "results", void 0);
191
+ __decorate([
192
+ (0, swagger_1.ApiProperty)({
193
+ description: 'Total number of months analyzed',
194
+ example: 13
195
+ }),
196
+ __metadata("design:type", Number)
197
+ ], RetentionAnalyticsResponseDTO.prototype, "totalMonths", void 0);
198
+ __decorate([
199
+ (0, swagger_1.ApiProperty)({
200
+ description: 'Query metadata',
201
+ type: 'object'
202
+ }),
203
+ __metadata("design:type", Object)
204
+ ], RetentionAnalyticsResponseDTO.prototype, "metadata", void 0);
205
+ //# sourceMappingURL=retention-analytics.dto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retention-analytics.dto.js","sourceRoot":"","sources":["../../../../../src/shared-lib/dto/analytics/retention-analytics.dto.ts"],"names":[],"mappings":"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"}
@@ -24,7 +24,7 @@ export declare class UserRankingFiltersDTO {
24
24
  */
25
25
  export declare class UserRankingAnalyticsRequestDTO {
26
26
  filters?: UserRankingFiltersDTO;
27
- sortBy?: 'totalTransactions' | 'tokenSpent' | 'userId' | 'email';
27
+ sortBy?: 'totalTransactions' | 'tokenSpent' | 'totalClaims' | 'userId' | 'email';
28
28
  sortOrder?: SortOrder;
29
29
  limit?: number;
30
30
  startDate?: Date;
@@ -42,6 +42,7 @@ export declare class UserRankingResultItemDTO {
42
42
  externalUserId: string | null;
43
43
  totalTransactions: number;
44
44
  tokenSpent: number;
45
+ totalClaims: number;
45
46
  hasLegacyTransactions?: boolean;
46
47
  }
47
48
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"user-ranking-analytics.dto.d.ts","sourceRoot":"","sources":["../../../../../src/shared-lib/dto/analytics/user-ranking-analytics.dto.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAErE,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAE7D;;;;;GAKG;AACH,qBAAa,qBAAqB;IAShC,UAAU,CAAC,EAAE,MAAM,CAAC;IASpB,SAAS,CAAC,EAAE,eAAe,CAAC;CAC7B;AAED;;;;;;;;;;GAUG;AACH,qBAAa,8BAA8B;IAYzC,OAAO,CAAC,EAAE,qBAAqB,CAAC;IAUhC,MAAM,CAAC,EAAE,mBAAmB,GAAG,YAAY,GAAG,QAAQ,GAAG,OAAO,CAAC;IAUjE,SAAS,CAAC,EAAE,SAAS,CAAC;IAatB,KAAK,CAAC,EAAE,MAAM,CAAC;IAQf,SAAS,CAAC,EAAE,IAAI,CAAC;IAQjB,OAAO,CAAC,EAAE,IAAI,CAAC;CAChB;AAED;;;;;GAKG;AACH,qBAAa,wBAAwB;IAUnC,MAAM,EAAG,MAAM,GAAG,IAAI,CAAC;IASvB,KAAK,EAAG,MAAM,GAAG,IAAI,CAAC;IAQtB,cAAc,EAAG,MAAM,GAAG,IAAI,CAAC;IAQ/B,iBAAiB,EAAG,MAAM,CAAC;IAM3B,UAAU,EAAG,MAAM,CAAC;IAUpB,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC;AAED;;;;;GAKG;AACH,qBAAa,+BAA+B;IAM1C,OAAO,EAAG,wBAAwB,EAAE,CAAC;IAMrC,UAAU,EAAG,MAAM,CAAC;IAMpB,QAAQ,EAAG,qBAAqB,GAAG;QACjC;;;WAGG;QACH,SAAS,CAAC,EAAE,eAAe,CAAC;QAE5B;;WAEG;QACH,OAAO,CAAC,EAAE;YACR,MAAM,EAAE,MAAM,CAAC;YACf,SAAS,EAAE,SAAS,CAAC;SACtB,CAAC;KACH,CAAC;CACH"}
1
+ {"version":3,"file":"user-ranking-analytics.dto.d.ts","sourceRoot":"","sources":["../../../../../src/shared-lib/dto/analytics/user-ranking-analytics.dto.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAErE,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAE7D;;;;;GAKG;AACH,qBAAa,qBAAqB;IAShC,UAAU,CAAC,EAAE,MAAM,CAAC;IASpB,SAAS,CAAC,EAAE,eAAe,CAAC;CAC7B;AAED;;;;;;;;;;GAUG;AACH,qBAAa,8BAA8B;IAYzC,OAAO,CAAC,EAAE,qBAAqB,CAAC;IAUhC,MAAM,CAAC,EAAE,mBAAmB,GAAG,YAAY,GAAG,aAAa,GAAG,QAAQ,GAAG,OAAO,CAAC;IAUjF,SAAS,CAAC,EAAE,SAAS,CAAC;IAatB,KAAK,CAAC,EAAE,MAAM,CAAC;IAQf,SAAS,CAAC,EAAE,IAAI,CAAC;IAQjB,OAAO,CAAC,EAAE,IAAI,CAAC;CAChB;AAED;;;;;GAKG;AACH,qBAAa,wBAAwB;IAUnC,MAAM,EAAG,MAAM,GAAG,IAAI,CAAC;IASvB,KAAK,EAAG,MAAM,GAAG,IAAI,CAAC;IAQtB,cAAc,EAAG,MAAM,GAAG,IAAI,CAAC;IAQ/B,iBAAiB,EAAG,MAAM,CAAC;IAM3B,UAAU,EAAG,MAAM,CAAC;IAMpB,WAAW,EAAG,MAAM,CAAC;IAUrB,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC;AAED;;;;;GAKG;AACH,qBAAa,+BAA+B;IAM1C,OAAO,EAAG,wBAAwB,EAAE,CAAC;IAMrC,UAAU,EAAG,MAAM,CAAC;IAMpB,QAAQ,EAAG,qBAAqB,GAAG;QACjC;;;WAGG;QACH,SAAS,CAAC,EAAE,eAAe,CAAC;QAE5B;;WAEG;QACH,OAAO,CAAC,EAAE;YACR,MAAM,EAAE,MAAM,CAAC;YACf,SAAS,EAAE,SAAS,CAAC;SACtB,CAAC;KACH,CAAC;CACH"}
@@ -84,7 +84,7 @@ __decorate([
84
84
  __decorate([
85
85
  (0, swagger_1.ApiPropertyOptional)({
86
86
  description: 'Field to sort results by',
87
- enum: ['totalTransactions', 'tokenSpent', 'userId', 'email'],
87
+ enum: ['totalTransactions', 'tokenSpent', 'totalClaims', 'userId', 'email'],
88
88
  default: 'totalTransactions',
89
89
  example: 'totalTransactions'
90
90
  }),
@@ -149,6 +149,7 @@ class UserRankingResultItemDTO {
149
149
  // ========== TRANSACTION METRICS ==========
150
150
  totalTransactions;
151
151
  tokenSpent;
152
+ totalClaims;
152
153
  // ========== METADATA ==========
153
154
  hasLegacyTransactions;
154
155
  }
@@ -196,6 +197,13 @@ __decorate([
196
197
  }),
197
198
  __metadata("design:type", Number)
198
199
  ], UserRankingResultItemDTO.prototype, "tokenSpent", void 0);
200
+ __decorate([
201
+ (0, swagger_1.ApiProperty)({
202
+ description: 'Total number of completed campaign claims by this user. Only counts claims with status=COMPLETED. Respects date range and business filters.',
203
+ example: 12
204
+ }),
205
+ __metadata("design:type", Number)
206
+ ], UserRankingResultItemDTO.prototype, "totalClaims", void 0);
199
207
  __decorate([
200
208
  (0, swagger_1.ApiPropertyOptional)({
201
209
  description: 'Indicates if this user has transactions without senderId (legacy transactions). User may still have full details if resolved via wallet or accountAddress. Post-migration, this will always be false.',