@umituz/react-native-firebase 2.6.2 → 2.6.4

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 (101) hide show
  1. package/package.json +1 -1
  2. package/src/application/auth/index.ts +2 -34
  3. package/src/application/auth/use-cases/index.ts +1 -21
  4. package/src/domains/account-deletion/domain/index.ts +1 -8
  5. package/src/domains/account-deletion/index.ts +0 -42
  6. package/src/domains/account-deletion/infrastructure/services/AccountDeletionExecutor.ts +79 -0
  7. package/src/domains/account-deletion/infrastructure/services/AccountDeletionTypes.ts +0 -1
  8. package/src/domains/account-deletion/infrastructure/services/account-deletion.service.ts +2 -14
  9. package/src/domains/auth/index.ts +3 -12
  10. package/src/domains/auth/infrastructure.ts +11 -0
  11. package/src/domains/firestore/domain/entities/Collection.ts +0 -2
  12. package/src/domains/firestore/domain/index.ts +8 -12
  13. package/src/domains/firestore/domain/value-objects/{QueryOptions.ts.bak → QueryOptions.ts} +20 -68
  14. package/src/domains/firestore/domain/value-objects/QueryOptionsFactory.ts +95 -0
  15. package/src/domains/firestore/domain/value-objects/QueryOptionsHelpers.ts +110 -0
  16. package/src/domains/firestore/domain/value-objects/WhereClause.ts +115 -0
  17. package/src/domains/firestore/domain/value-objects/WhereClauseFactory.ts +101 -0
  18. package/src/domains/firestore/domain/value-objects/WhereClauseHelpers.ts +123 -0
  19. package/src/domains/firestore/domain/value-objects/WhereClauseValidation.ts +83 -0
  20. package/src/domains/firestore/presentation/hooks/useFirestoreMutation.ts +1 -1
  21. package/src/domains/firestore/presentation/hooks/useFirestoreQuery.ts +1 -1
  22. package/src/shared/infrastructure/config/base/ServiceClientSingleton.ts +29 -0
  23. package/src/application/auth/ports/AuthPort.ts.bak +0 -164
  24. package/src/application/auth/ports/AuthPort_part_aa +0 -150
  25. package/src/application/auth/ports/AuthPort_part_ab +0 -14
  26. package/src/application/auth/use-cases/SignInUseCase.ts.bak +0 -253
  27. package/src/application/auth/use-cases/SignInUseCaseHelpers.ts +0 -0
  28. package/src/application/auth/use-cases/SignInUseCaseMain.ts +0 -0
  29. package/src/application/auth/use-cases/SignInUseCase_part_aa +0 -150
  30. package/src/application/auth/use-cases/SignInUseCase_part_ab +0 -103
  31. package/src/application/auth/use-cases/SignOutUseCase.ts.bak +0 -288
  32. package/src/application/auth/use-cases/SignOutUseCaseCleanup.ts +0 -0
  33. package/src/application/auth/use-cases/SignOutUseCaseMain.ts +0 -0
  34. package/src/application/auth/use-cases/SignOutUseCase_part_aa +0 -150
  35. package/src/application/auth/use-cases/SignOutUseCase_part_ab +0 -138
  36. package/src/domains/account-deletion/domain/services/UserValidationHelpers.ts.bak +0 -181
  37. package/src/domains/account-deletion/domain/services/UserValidationHelpers_part_aa +0 -150
  38. package/src/domains/account-deletion/domain/services/UserValidationHelpers_part_ab +0 -31
  39. package/src/domains/account-deletion/domain/services/UserValidationService.ts.bak +0 -286
  40. package/src/domains/account-deletion/domain/services/UserValidationService_part_aa +0 -150
  41. package/src/domains/account-deletion/domain/services/UserValidationService_part_ab +0 -136
  42. package/src/domains/account-deletion/infrastructure/services/AccountDeletionExecutor.ts.bak +0 -230
  43. package/src/domains/account-deletion/infrastructure/services/AccountDeletionExecutor_part_aa +0 -150
  44. package/src/domains/account-deletion/infrastructure/services/AccountDeletionExecutor_part_ab +0 -80
  45. package/src/domains/account-deletion/infrastructure/services/AccountDeletionReauthHandler.ts.bak +0 -174
  46. package/src/domains/account-deletion/infrastructure/services/AccountDeletionReauthHandler_part_aa +0 -150
  47. package/src/domains/account-deletion/infrastructure/services/AccountDeletionReauthHandler_part_ab +0 -24
  48. package/src/domains/account-deletion/infrastructure/services/AccountDeletionRepository.ts.bak +0 -266
  49. package/src/domains/account-deletion/infrastructure/services/AccountDeletionRepository_part_aa +0 -150
  50. package/src/domains/account-deletion/infrastructure/services/AccountDeletionRepository_part_ab +0 -116
  51. package/src/domains/account-deletion/infrastructure/services/reauthentication.service.ts.bak +0 -160
  52. package/src/domains/account-deletion/infrastructure/services/reauthentication.service_part_aa +0 -150
  53. package/src/domains/account-deletion/infrastructure/services/reauthentication.service_part_ab +0 -10
  54. package/src/domains/auth/infrastructure.ts.bak +0 -156
  55. package/src/domains/auth/infrastructure_part_aa +0 -150
  56. package/src/domains/auth/infrastructure_part_ab +0 -6
  57. package/src/domains/auth/presentation/hooks/GoogleOAuthHelpers.ts +0 -0
  58. package/src/domains/auth/presentation/hooks/GoogleOAuthHookService.ts.bak +0 -247
  59. package/src/domains/auth/presentation/hooks/GoogleOAuthHookService_part_aa +0 -150
  60. package/src/domains/auth/presentation/hooks/GoogleOAuthHookService_part_ab +0 -97
  61. package/src/domains/auth/presentation/hooks/GoogleOAuthService.ts +0 -0
  62. package/src/domains/firestore/domain/entities/Collection.ts.bak +0 -288
  63. package/src/domains/firestore/domain/entities/Collection_part_aa +0 -150
  64. package/src/domains/firestore/domain/entities/Collection_part_ab +0 -138
  65. package/src/domains/firestore/domain/entities/Document.ts.bak +0 -233
  66. package/src/domains/firestore/domain/entities/DocumentHelpers.ts +0 -0
  67. package/src/domains/firestore/domain/entities/DocumentMain.ts +0 -0
  68. package/src/domains/firestore/domain/entities/Document_part_aa +0 -150
  69. package/src/domains/firestore/domain/entities/Document_part_ab +0 -83
  70. package/src/domains/firestore/domain/services/QueryService.ts.bak +0 -182
  71. package/src/domains/firestore/domain/services/QueryServiceAnalysis.ts.bak +0 -169
  72. package/src/domains/firestore/domain/services/QueryServiceAnalysis_part_aa +0 -150
  73. package/src/domains/firestore/domain/services/QueryServiceAnalysis_part_ab +0 -19
  74. package/src/domains/firestore/domain/services/QueryServiceHelpers.ts.bak +0 -151
  75. package/src/domains/firestore/domain/services/QueryServiceHelpers_part_aa +0 -150
  76. package/src/domains/firestore/domain/services/QueryServiceHelpers_part_ab +0 -1
  77. package/src/domains/firestore/domain/services/QueryService_part_aa +0 -150
  78. package/src/domains/firestore/domain/services/QueryService_part_ab +0 -32
  79. package/src/domains/firestore/domain/value-objects/QueryOptionsSerialization.ts.bak +0 -207
  80. package/src/domains/firestore/domain/value-objects/QueryOptionsSerialization_part_aa +0 -150
  81. package/src/domains/firestore/domain/value-objects/QueryOptionsSerialization_part_ab +0 -57
  82. package/src/domains/firestore/domain/value-objects/QueryOptionsValidation.ts.bak +0 -182
  83. package/src/domains/firestore/domain/value-objects/QueryOptionsValidation_part_aa +0 -150
  84. package/src/domains/firestore/domain/value-objects/QueryOptionsValidation_part_ab +0 -32
  85. package/src/domains/firestore/domain/value-objects/QueryOptions_part_aa +0 -150
  86. package/src/domains/firestore/domain/value-objects/QueryOptions_part_ab +0 -41
  87. package/src/domains/firestore/domain/value-objects/WhereClause.ts.bak +0 -299
  88. package/src/domains/firestore/domain/value-objects/WhereClauseFactory.ts.bak +0 -207
  89. package/src/domains/firestore/domain/value-objects/WhereClauseFactory_part_aa +0 -150
  90. package/src/domains/firestore/domain/value-objects/WhereClauseFactory_part_ab +0 -57
  91. package/src/domains/firestore/domain/value-objects/WhereClause_part_aa +0 -150
  92. package/src/domains/firestore/domain/value-objects/WhereClause_part_ab +0 -149
  93. package/src/shared/infrastructure/base/ErrorHandler.ts.bak +0 -189
  94. package/src/shared/infrastructure/base/ErrorHandler_part_aa +0 -150
  95. package/src/shared/infrastructure/base/ErrorHandler_part_ab +0 -39
  96. package/src/shared/infrastructure/base/ServiceBase.ts.bak +0 -220
  97. package/src/shared/infrastructure/base/ServiceBase_part_aa +0 -150
  98. package/src/shared/infrastructure/base/ServiceBase_part_ab +0 -70
  99. package/src/shared/infrastructure/config/base/ServiceClientSingleton.ts.bak +0 -155
  100. package/src/shared/infrastructure/config/base/ServiceClientSingleton_part_aa +0 -150
  101. package/src/shared/infrastructure/config/base/ServiceClientSingleton_part_ab +0 -5
@@ -1,150 +0,0 @@
1
- /**
2
- * Query Service (Main Builder)
3
- * Single Responsibility: Build and validate Firestore queries
4
- *
5
- * Domain service that encapsulates query building logic.
6
- * Moves business logic from infrastructure to domain layer.
7
- *
8
- * Max lines: 150 (enforced for maintainability)
9
- */
10
-
11
- import type { Query, Firestore, WhereFilterOp } from 'firebase/firestore';
12
- import { collection, query, where, orderBy, limit, startAfter, startAt } from 'firebase/firestore';
13
- import { QueryOptions, createQueryOptions } from '../value-objects/QueryOptions';
14
- import { WhereClause } from '../value-objects/WhereClause';
15
-
16
- /**
17
- * Query builder result
18
- */
19
- export interface QueryBuilderResult {
20
- readonly query: Query;
21
- readonly options: QueryOptions;
22
- }
23
-
24
- /**
25
- * Query service
26
- * Provides query building and validation functionality
27
- */
28
- export class QueryService {
29
- private readonly db: Firestore;
30
-
31
- constructor(db: Firestore) {
32
- this.db = db;
33
- }
34
-
35
- /**
36
- * Build a query from options
37
- * Main method for query construction
38
- */
39
- buildQuery(collectionPath: string, options: QueryOptions): QueryBuilderResult {
40
- const validation = options.validate();
41
- if (!validation.valid) {
42
- throw new Error(`Invalid query options: ${validation.errors.join(', ')}`);
43
- }
44
-
45
- const collectionRef = collection(this.db, collectionPath);
46
- let q: Query = collectionRef;
47
-
48
- // Apply where clauses
49
- for (const clause of options.whereClauses) {
50
- q = query(q, where(clause.field, clause.operator, clause.value));
51
- }
52
-
53
- // Apply sort options
54
- for (const sort of options.sortOptions) {
55
- q = query(q, orderBy(sort.field, sort.direction));
56
- }
57
-
58
- // Apply date range
59
- if (options.dateRange) {
60
- const { field, startDate, endDate } = options.dateRange;
61
- if (startDate) {
62
- q = query(q, where(field, '>=', startDate));
63
- }
64
- if (endDate) {
65
- q = query(q, where(field, '<=', endDate));
66
- }
67
- }
68
-
69
- // Apply pagination
70
- if (options.pagination) {
71
- const { cursor, limit: limitValue, startAfter: startAfterValue, startAt: startAtValue } = options.pagination;
72
-
73
- if (startAfterValue !== undefined) {
74
- q = query(q, startAfter(startAfterValue));
75
- }
76
-
77
- if (startAtValue !== undefined) {
78
- q = query(q, startAt(startAtValue));
79
- }
80
-
81
- if (limitValue !== undefined) {
82
- q = query(q, limit(limitValue));
83
- }
84
- }
85
-
86
- return { query: q, options };
87
- }
88
-
89
- /**
90
- * Build simple query with single where clause
91
- */
92
- buildSimpleQuery(
93
- collectionPath: string,
94
- field: string,
95
- operator: WhereFilterOp,
96
- value: unknown
97
- ): Query {
98
- const options = createQueryOptions({
99
- where: [WhereClause.create(field, operator, value)],
100
- });
101
-
102
- return this.buildQuery(collectionPath, options).query;
103
- }
104
-
105
- /**
106
- * Build query with equality filter
107
- */
108
- buildEqualsQuery(collectionPath: string, field: string, value: unknown): Query {
109
- return this.buildSimpleQuery(collectionPath, field, '==', value);
110
- }
111
-
112
- /**
113
- * Build query with multiple equality filters
114
- */
115
- buildMultiEqualsQuery(
116
- collectionPath: string,
117
- filters: Record<string, unknown>
118
- ): Query {
119
- const whereClauses = Object.entries(filters).map(([field, value]) =>
120
- WhereClause.equals(field, value)
121
- );
122
-
123
- const options = createQueryOptions({ where: whereClauses });
124
- return this.buildQuery(collectionPath, options).query;
125
- }
126
-
127
- /**
128
- * Build query with sorting
129
- */
130
- buildSortedQuery(
131
- collectionPath: string,
132
- sortField: string,
133
- direction: 'asc' | 'desc' = 'asc'
134
- ): Query {
135
- const options = createQueryOptions({
136
- sort: [{ field: sortField, direction }],
137
- });
138
-
139
- return this.buildQuery(collectionPath, options).query;
140
- }
141
-
142
- /**
143
- * Build query with limit
144
- */
145
- buildLimitedQuery(collectionPath: string, limitValue: number): Query {
146
- const options = createQueryOptions({
147
- pagination: { limit: limitValue },
148
- });
149
-
150
- return this.buildQuery(collectionPath, options).query;
@@ -1,32 +0,0 @@
1
- }
2
-
3
- /**
4
- * Build query with date range
5
- */
6
- buildDateRangeQuery(
7
- collectionPath: string,
8
- field: string,
9
- startDate?: Date,
10
- endDate?: Date
11
- ): Query {
12
- const options = createQueryOptions({
13
- dateRange: { field, startDate, endDate },
14
- });
15
-
16
- return this.buildQuery(collectionPath, options).query;
17
- }
18
-
19
- /**
20
- * Validate query options
21
- */
22
- validateOptions(options: QueryOptions): { valid: boolean; errors: string[] } {
23
- return options.validate();
24
- }
25
-
26
- /**
27
- * Check if query is empty (no filters)
28
- */
29
- isEmptyQuery(options: QueryOptions): boolean {
30
- return options.isEmpty();
31
- }
32
- }
@@ -1,207 +0,0 @@
1
- /**
2
- * Query Options Serialization
3
- * Single Responsibility: Handle serialization and conversion
4
- *
5
- * Serialization and conversion utilities for QueryOptions.
6
- * Separated for better maintainability.
7
- *
8
- * Max lines: 150 (enforced for maintainability)
9
- */
10
-
11
- import { QueryOptions, createQueryOptions } from './QueryOptions';
12
- import { WhereClause } from './WhereClause';
13
- import type { SortOptions, DateRangeOptions, PaginationOptions } from './QueryOptions';
14
-
15
- /**
16
- * Convert to plain object (for serialization)
17
- */
18
- export function toObject(options: QueryOptions): {
19
- where: WhereClause[];
20
- sort: SortOptions[];
21
- dateRange: DateRangeOptions | null;
22
- pagination: PaginationOptions | null;
23
- } {
24
- return {
25
- where: [...options.whereClauses],
26
- sort: [...options.sortOptions],
27
- dateRange: options.dateRange,
28
- pagination: options.pagination,
29
- };
30
- }
31
-
32
- /**
33
- * Create from plain object
34
- */
35
- export function fromObject(obj: {
36
- where?: Array<{ field: string; operator: string; value: unknown }>;
37
- sort?: SortOptions[];
38
- dateRange?: DateRangeOptions;
39
- pagination?: PaginationOptions;
40
- }): QueryOptions {
41
- return QueryOptions.create({
42
- where: obj.where?.map(w => WhereClause.create(w.field, w.operator as any, w.value)) || [],
43
- sort: obj.sort || [],
44
- dateRange: obj.dateRange || null,
45
- pagination: obj.pagination || null,
46
- });
47
- }
48
-
49
- /**
50
- * Create from filters object (simplified)
51
- */
52
- export function fromFilters(filters: Record<string, unknown>): QueryOptions {
53
- const whereClauses = Object.entries(filters).map(([field, value]) =>
54
- WhereClause.equals(field, value)
55
- );
56
-
57
- return QueryOptions.create({ where: whereClauses });
58
- }
59
-
60
- /**
61
- * Merge multiple query options
62
- */
63
- export function mergeOptions(...options: QueryOptions[]): QueryOptions {
64
- if (options.length === 0) {
65
- return createQueryOptions();
66
- }
67
-
68
- if (options.length === 1) {
69
- return options[0];
70
- }
71
-
72
- const merged = options.reduce((acc, opt) => {
73
- return QueryOptions.create({
74
- where: [...acc.whereClauses, ...opt.whereClauses] as WhereClause[],
75
- sort: opt.sortOptions.length > 0 ? [...opt.sortOptions] as any[] : [...acc.sortOptions] as any[],
76
- dateRange: opt.dateRange ?? acc.dateRange,
77
- pagination: opt.pagination ?? acc.pagination,
78
- });
79
- });
80
-
81
- return merged ?? createQueryOptions();
82
- }
83
-
84
- /**
85
- * Create paginated query options
86
- */
87
- export function createPaginatedOptions(limit: number, cursor?: number): QueryOptions {
88
- return createQueryOptions({
89
- pagination: { limit, cursor },
90
- });
91
- }
92
-
93
- /**
94
- * Create sorted query options
95
- */
96
- export function createSortedOptions(
97
- field: string,
98
- direction: 'asc' | 'desc' = 'asc'
99
- ): QueryOptions {
100
- return createQueryOptions({
101
- sort: [{ field, direction }],
102
- });
103
- }
104
-
105
- /**
106
- * Create date range query options
107
- */
108
- export function createDateRangeOptions(
109
- field: string,
110
- startDate?: Date,
111
- endDate?: Date
112
- ): QueryOptions {
113
- return createQueryOptions({
114
- dateRange: { field, startDate, endDate },
115
- });
116
- }
117
-
118
- /**
119
- * Clone query options with safety checks
120
- */
121
- export function cloneSafe(options: QueryOptions, defaults?: Partial<{
122
- where: WhereClause[];
123
- sort: SortOptions[];
124
- dateRange: DateRangeOptions;
125
- pagination: PaginationOptions;
126
- }>): QueryOptions {
127
- return QueryOptions.create({
128
- where: options.whereClauses.length > 0 ? [...options.whereClauses] as WhereClause[] : defaults?.where || [],
129
- sort: options.sortOptions.length > 0 ? [...options.sortOptions] as SortOptions[] : defaults?.sort || [],
130
- dateRange: options.dateRange ?? defaults?.dateRange ?? null,
131
- pagination: options.pagination ?? defaults?.pagination ?? null,
132
- });
133
- }
134
-
135
- /**
136
- * Strip pagination from options
137
- */
138
- export function withoutPagination(options: QueryOptions): QueryOptions {
139
- return QueryOptions.create({
140
- where: [...options.whereClauses] as WhereClause[],
141
- sort: [...options.sortOptions] as SortOptions[],
142
- dateRange: options.dateRange,
143
- pagination: null,
144
- });
145
- }
146
-
147
- /**
148
- * Strip sort from options
149
- */
150
- export function withoutSort(options: QueryOptions): QueryOptions {
151
- return QueryOptions.create({
152
- where: [...options.whereClauses] as WhereClause[],
153
- sort: [],
154
- dateRange: options.dateRange,
155
- pagination: options.pagination,
156
- });
157
- }
158
-
159
- /**
160
- * Strip date range from options
161
- */
162
- export function withoutDateRange(options: QueryOptions): QueryOptions {
163
- return QueryOptions.create({
164
- where: [...options.whereClauses] as WhereClause[],
165
- sort: [...options.sortOptions] as SortOptions[],
166
- dateRange: null,
167
- pagination: options.pagination,
168
- });
169
- }
170
-
171
- /**
172
- * Strip where clauses from options
173
- */
174
- export function withoutWhere(options: QueryOptions): QueryOptions {
175
- return QueryOptions.create({
176
- where: [],
177
- sort: [...options.sortOptions] as SortOptions[],
178
- dateRange: options.dateRange,
179
- pagination: options.pagination,
180
- });
181
- }
182
-
183
- /**
184
- * Add limit to existing options
185
- */
186
- export function withLimit(options: QueryOptions, limit: number): QueryOptions {
187
- const currentPagination = options.pagination || {};
188
- return QueryOptions.create({
189
- where: [...options.whereClauses] as WhereClause[],
190
- sort: [...options.sortOptions] as SortOptions[],
191
- dateRange: options.dateRange,
192
- pagination: { ...currentPagination, limit },
193
- });
194
- }
195
-
196
- /**
197
- * Add cursor to existing options
198
- */
199
- export function withCursor(options: QueryOptions, cursor: number): QueryOptions {
200
- const currentPagination = options.pagination || {};
201
- return QueryOptions.create({
202
- where: [...options.whereClauses] as WhereClause[],
203
- sort: [...options.sortOptions] as SortOptions[],
204
- dateRange: options.dateRange,
205
- pagination: { ...currentPagination, cursor },
206
- });
207
- }
@@ -1,150 +0,0 @@
1
- /**
2
- * Query Options Serialization
3
- * Single Responsibility: Handle serialization and conversion
4
- *
5
- * Serialization and conversion utilities for QueryOptions.
6
- * Separated for better maintainability.
7
- *
8
- * Max lines: 150 (enforced for maintainability)
9
- */
10
-
11
- import { QueryOptions, createQueryOptions } from './QueryOptions';
12
- import { WhereClause } from './WhereClause';
13
- import type { SortOptions, DateRangeOptions, PaginationOptions } from './QueryOptions';
14
-
15
- /**
16
- * Convert to plain object (for serialization)
17
- */
18
- export function toObject(options: QueryOptions): {
19
- where: WhereClause[];
20
- sort: SortOptions[];
21
- dateRange: DateRangeOptions | null;
22
- pagination: PaginationOptions | null;
23
- } {
24
- return {
25
- where: [...options.whereClauses],
26
- sort: [...options.sortOptions],
27
- dateRange: options.dateRange,
28
- pagination: options.pagination,
29
- };
30
- }
31
-
32
- /**
33
- * Create from plain object
34
- */
35
- export function fromObject(obj: {
36
- where?: Array<{ field: string; operator: string; value: unknown }>;
37
- sort?: SortOptions[];
38
- dateRange?: DateRangeOptions;
39
- pagination?: PaginationOptions;
40
- }): QueryOptions {
41
- return QueryOptions.create({
42
- where: obj.where?.map(w => WhereClause.create(w.field, w.operator as any, w.value)) || [],
43
- sort: obj.sort || [],
44
- dateRange: obj.dateRange || null,
45
- pagination: obj.pagination || null,
46
- });
47
- }
48
-
49
- /**
50
- * Create from filters object (simplified)
51
- */
52
- export function fromFilters(filters: Record<string, unknown>): QueryOptions {
53
- const whereClauses = Object.entries(filters).map(([field, value]) =>
54
- WhereClause.equals(field, value)
55
- );
56
-
57
- return QueryOptions.create({ where: whereClauses });
58
- }
59
-
60
- /**
61
- * Merge multiple query options
62
- */
63
- export function mergeOptions(...options: QueryOptions[]): QueryOptions {
64
- if (options.length === 0) {
65
- return createQueryOptions();
66
- }
67
-
68
- if (options.length === 1) {
69
- return options[0];
70
- }
71
-
72
- const merged = options.reduce((acc, opt) => {
73
- return QueryOptions.create({
74
- where: [...acc.whereClauses, ...opt.whereClauses] as WhereClause[],
75
- sort: opt.sortOptions.length > 0 ? [...opt.sortOptions] as any[] : [...acc.sortOptions] as any[],
76
- dateRange: opt.dateRange ?? acc.dateRange,
77
- pagination: opt.pagination ?? acc.pagination,
78
- });
79
- });
80
-
81
- return merged ?? createQueryOptions();
82
- }
83
-
84
- /**
85
- * Create paginated query options
86
- */
87
- export function createPaginatedOptions(limit: number, cursor?: number): QueryOptions {
88
- return createQueryOptions({
89
- pagination: { limit, cursor },
90
- });
91
- }
92
-
93
- /**
94
- * Create sorted query options
95
- */
96
- export function createSortedOptions(
97
- field: string,
98
- direction: 'asc' | 'desc' = 'asc'
99
- ): QueryOptions {
100
- return createQueryOptions({
101
- sort: [{ field, direction }],
102
- });
103
- }
104
-
105
- /**
106
- * Create date range query options
107
- */
108
- export function createDateRangeOptions(
109
- field: string,
110
- startDate?: Date,
111
- endDate?: Date
112
- ): QueryOptions {
113
- return createQueryOptions({
114
- dateRange: { field, startDate, endDate },
115
- });
116
- }
117
-
118
- /**
119
- * Clone query options with safety checks
120
- */
121
- export function cloneSafe(options: QueryOptions, defaults?: Partial<{
122
- where: WhereClause[];
123
- sort: SortOptions[];
124
- dateRange: DateRangeOptions;
125
- pagination: PaginationOptions;
126
- }>): QueryOptions {
127
- return QueryOptions.create({
128
- where: options.whereClauses.length > 0 ? [...options.whereClauses] as WhereClause[] : defaults?.where || [],
129
- sort: options.sortOptions.length > 0 ? [...options.sortOptions] as SortOptions[] : defaults?.sort || [],
130
- dateRange: options.dateRange ?? defaults?.dateRange ?? null,
131
- pagination: options.pagination ?? defaults?.pagination ?? null,
132
- });
133
- }
134
-
135
- /**
136
- * Strip pagination from options
137
- */
138
- export function withoutPagination(options: QueryOptions): QueryOptions {
139
- return QueryOptions.create({
140
- where: [...options.whereClauses] as WhereClause[],
141
- sort: [...options.sortOptions] as SortOptions[],
142
- dateRange: options.dateRange,
143
- pagination: null,
144
- });
145
- }
146
-
147
- /**
148
- * Strip sort from options
149
- */
150
- export function withoutSort(options: QueryOptions): QueryOptions {
@@ -1,57 +0,0 @@
1
- return QueryOptions.create({
2
- where: [...options.whereClauses] as WhereClause[],
3
- sort: [],
4
- dateRange: options.dateRange,
5
- pagination: options.pagination,
6
- });
7
- }
8
-
9
- /**
10
- * Strip date range from options
11
- */
12
- export function withoutDateRange(options: QueryOptions): QueryOptions {
13
- return QueryOptions.create({
14
- where: [...options.whereClauses] as WhereClause[],
15
- sort: [...options.sortOptions] as SortOptions[],
16
- dateRange: null,
17
- pagination: options.pagination,
18
- });
19
- }
20
-
21
- /**
22
- * Strip where clauses from options
23
- */
24
- export function withoutWhere(options: QueryOptions): QueryOptions {
25
- return QueryOptions.create({
26
- where: [],
27
- sort: [...options.sortOptions] as SortOptions[],
28
- dateRange: options.dateRange,
29
- pagination: options.pagination,
30
- });
31
- }
32
-
33
- /**
34
- * Add limit to existing options
35
- */
36
- export function withLimit(options: QueryOptions, limit: number): QueryOptions {
37
- const currentPagination = options.pagination || {};
38
- return QueryOptions.create({
39
- where: [...options.whereClauses] as WhereClause[],
40
- sort: [...options.sortOptions] as SortOptions[],
41
- dateRange: options.dateRange,
42
- pagination: { ...currentPagination, limit },
43
- });
44
- }
45
-
46
- /**
47
- * Add cursor to existing options
48
- */
49
- export function withCursor(options: QueryOptions, cursor: number): QueryOptions {
50
- const currentPagination = options.pagination || {};
51
- return QueryOptions.create({
52
- where: [...options.whereClauses] as WhereClause[],
53
- sort: [...options.sortOptions] as SortOptions[],
54
- dateRange: options.dateRange,
55
- pagination: { ...currentPagination, cursor },
56
- });
57
- }