@vertikalx/vtx-backend-client 3.0.1-dev-max.6 → 3.1.0

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 (72) hide show
  1. package/package.json +1 -1
  2. package/src/api/api-call-headers.js.map +1 -1
  3. package/src/api/backend-response.js.map +1 -1
  4. package/src/api/domains.js.map +1 -1
  5. package/src/api/response-builder.js.map +1 -1
  6. package/src/api/types.js.map +1 -1
  7. package/src/api/vtx-apikey-api.js.map +1 -1
  8. package/src/api/vtx-base-api.d.ts +0 -38
  9. package/src/api/vtx-base-api.js +0 -72
  10. package/src/api/vtx-base-api.js.map +1 -1
  11. package/src/api/vtx-mobile-api.js.map +1 -1
  12. package/src/api/vtx-web-browser-api.js.map +1 -1
  13. package/src/api/vtx-web-server-api.js.map +1 -1
  14. package/src/client/schema.graphql +4578 -0
  15. package/src/generated/graphql.d.ts +111 -1833
  16. package/src/generated/graphql.js +13 -561
  17. package/src/generated/graphql.js.map +1 -1
  18. package/src/index.js.map +1 -1
  19. package/src/operations/admin.graphql +19 -0
  20. package/src/operations/ai-coach.graphql +117 -0
  21. package/src/operations/athlete.graphql +1764 -0
  22. package/src/operations/auth.graphql +301 -0
  23. package/src/operations/campaign.graphql +822 -0
  24. package/src/operations/email-campaign.graphql +160 -0
  25. package/src/operations/followers.graphql +45 -0
  26. package/src/operations/integrations.graphql +216 -0
  27. package/src/operations/leaderboard.graphql +54 -0
  28. package/src/operations/media.graphql +179 -0
  29. package/src/operations/notifications.graphql +93 -0
  30. package/src/operations/offers.graphql +368 -0
  31. package/src/operations/onboarding.graphql +29 -0
  32. package/src/operations/sponsor.graphql +368 -0
  33. package/src/operations/sport.graphql +132 -0
  34. package/src/operations/teams-clubs.graphql +398 -0
  35. package/src/operations/user.graphql +446 -0
  36. package/tsconfig.lib.json +10 -0
  37. package/src/client/index.d.ts +0 -25
  38. package/src/client/index.js +0 -44
  39. package/src/client/index.js.map +0 -1
  40. package/src/client/runtime/batcher.d.ts +0 -36
  41. package/src/client/runtime/batcher.js +0 -123
  42. package/src/client/runtime/batcher.js.map +0 -1
  43. package/src/client/runtime/createClient.d.ts +0 -17
  44. package/src/client/runtime/createClient.js +0 -28
  45. package/src/client/runtime/createClient.js.map +0 -1
  46. package/src/client/runtime/error.d.ts +0 -15
  47. package/src/client/runtime/error.js +0 -19
  48. package/src/client/runtime/error.js.map +0 -1
  49. package/src/client/runtime/fetcher.d.ts +0 -10
  50. package/src/client/runtime/fetcher.js +0 -68
  51. package/src/client/runtime/fetcher.js.map +0 -1
  52. package/src/client/runtime/generateGraphqlOperation.d.ts +0 -30
  53. package/src/client/runtime/generateGraphqlOperation.js +0 -134
  54. package/src/client/runtime/generateGraphqlOperation.js.map +0 -1
  55. package/src/client/runtime/index.d.ts +0 -11
  56. package/src/client/runtime/index.js +0 -17
  57. package/src/client/runtime/index.js.map +0 -1
  58. package/src/client/runtime/linkTypeMap.d.ts +0 -9
  59. package/src/client/runtime/linkTypeMap.js +0 -95
  60. package/src/client/runtime/linkTypeMap.js.map +0 -1
  61. package/src/client/runtime/typeSelection.d.ts +0 -28
  62. package/src/client/runtime/typeSelection.js +0 -3
  63. package/src/client/runtime/typeSelection.js.map +0 -1
  64. package/src/client/runtime/types.d.ts +0 -55
  65. package/src/client/runtime/types.js +0 -3
  66. package/src/client/runtime/types.js.map +0 -1
  67. package/src/client/schema.d.ts +0 -8244
  68. package/src/client/schema.js +0 -1746
  69. package/src/client/schema.js.map +0 -1
  70. package/src/client/types.d.ts +0 -4369
  71. package/src/client/types.js +0 -11480
  72. package/src/client/types.js.map +0 -1
@@ -0,0 +1,4578 @@
1
+ type User {
2
+ _id: String!
3
+ loginEmail: String!
4
+ suspended: Boolean!
5
+ domains: [DomainCredential!]
6
+ loginMethods: [String!]
7
+ }
8
+
9
+ type UserWithToken {
10
+ _id: String!
11
+ loginEmail: String!
12
+ suspended: Boolean!
13
+ domains: [DomainCredential!]
14
+ loginMethods: [String!]
15
+ token: UserToken!
16
+ }
17
+
18
+ type BaseTenant {
19
+ _id: String!
20
+ name: String!
21
+ tenant_uri: String!
22
+ domain: Domain!
23
+ }
24
+
25
+ type Tenant {
26
+ _id: String!
27
+ name: String!
28
+ tenant_uri: String!
29
+ domain: Domain!
30
+ email: String!
31
+ owner: User
32
+ }
33
+
34
+ type Domain {
35
+ _id: String!
36
+ name: String!
37
+ description: String
38
+ }
39
+
40
+ type DomainCredential {
41
+ _id: String!
42
+ name: String!
43
+ description: String
44
+ tenant: BaseTenant
45
+ }
46
+
47
+ type UserToken {
48
+ actualToken: String!
49
+ refreshToken: String!
50
+ }
51
+
52
+ type DecodedToken {
53
+ tokenId: String!
54
+ systemId: String!
55
+ userId: String!
56
+ email: String!
57
+ refreshTokenId: String!
58
+ domains: [DomainCredential!]!
59
+ clientType: String
60
+ }
61
+
62
+ type DecodedRefreshToken {
63
+ userId: String!
64
+ email: String!
65
+ originalTokenId: String!
66
+ }
67
+
68
+ type TenantWithUserLogin {
69
+ _id: String!
70
+ name: String!
71
+ tenant_uri: String!
72
+ domain: Domain!
73
+ email: String!
74
+ owner: User
75
+ user: UserWithToken!
76
+ }
77
+
78
+ type UriAvailableType {
79
+ available: Boolean!
80
+ valid: Boolean!
81
+ }
82
+
83
+ type Agreement {
84
+ _id: String!
85
+ kind: String!
86
+ domain: String!
87
+ isActiveAgreement: Boolean!
88
+ encoding: String!
89
+ version: String!
90
+ publishedDate: DateTime
91
+ unPublishedDate: DateTime
92
+ locked: Boolean!
93
+ name: String!
94
+ description: String
95
+ content: String
96
+ httpContentType: String
97
+ createdDate: DateTime!
98
+ updatedDate: DateTime!
99
+ }
100
+
101
+ """
102
+ A date-time string at UTC, such as 2019-12-03T09:54:33Z, compliant with the date-time format.
103
+ """
104
+ scalar DateTime
105
+
106
+ type SignedAgreement {
107
+ _id: String!
108
+ agreement: Agreement!
109
+ createdDate: DateTime!
110
+ signerReference: String
111
+ json: String
112
+ signedDate: DateTime!
113
+ ipAddress: String
114
+ userAgent: String
115
+ signedFromLocation: String
116
+ comments: String
117
+ updatedDate: DateTime!
118
+ }
119
+
120
+ type BillEntity {
121
+ name: String!
122
+ taxId: String
123
+ line1: String
124
+ line2: String
125
+ line3: String
126
+ city: String
127
+ state: String
128
+ country: String
129
+ zip: String
130
+ }
131
+
132
+ type InvoiceItem {
133
+ _id: String!
134
+ unitPrice: Float!
135
+ unitTax: Float!
136
+ quantity: Float!
137
+ unit: String!
138
+ itemPrice: Float!
139
+ itemTotal: Float!
140
+ }
141
+
142
+ type Payment {
143
+ _id: String!
144
+ amount: Float!
145
+ currency: String!
146
+ datePaid: DateTime!
147
+ paymentComment: String
148
+ transactionId: String
149
+ processorType: String
150
+ processorReference: String
151
+ paidItemReference: String
152
+ payeeReference: String
153
+ payorReference: String
154
+ paymentMethodType: String
155
+ paymentMethodReference: String
156
+ }
157
+
158
+ type PlaFeature {
159
+ _id: String!
160
+ title: String!
161
+ description: String
162
+ quantity: Float
163
+ quantityUnit: String
164
+ }
165
+
166
+ type Plan {
167
+ _id: String!
168
+ name: String
169
+ description: String
170
+ prices: [PlanPrice!]!
171
+ features: [PlaFeature!]!
172
+ isPublic: Boolean!
173
+ active: Boolean!
174
+ startOfferingDate: DateTime
175
+ endOfferingDate: DateTime
176
+ termsAndConditions: String
177
+ }
178
+
179
+ type PlanPrice {
180
+ _id: String!
181
+ currency: String!
182
+ price: Float!
183
+ taxMode: String!
184
+ period: String!
185
+ customDays: Float
186
+ plan: Plan
187
+ }
188
+
189
+ type Invoice {
190
+ _id: String!
191
+ invoiceDate: DateTime!
192
+ billedEntity: BillEntity!
193
+ dueDate: DateTime!
194
+ billAmount: Float!
195
+ tax: Float!
196
+ total: Float!
197
+ currency: String!
198
+ items: [InvoiceItem!]
199
+ payments: [Payment!]
200
+ }
201
+
202
+ type SubscriptionInvoice {
203
+ _id: String!
204
+ invoice: Invoice!
205
+ billedPlan: PlanPrice!
206
+ subscriber: PlanSubscription!
207
+ }
208
+
209
+ type PlanSubscription {
210
+ _id: String!
211
+ currentPlan: PlanPrice!
212
+ billPrice: Float!
213
+ billCurrency: String!
214
+ billPriceComment: String
215
+ lastBillDate: DateTime!
216
+ endAccessDate: DateTime!
217
+ autoRenew: Boolean!
218
+ autoRenewPlan: PlanPrice
219
+ autoRenewDate: DateTime!
220
+ payments: [SubscriptionPayment!]!
221
+ invoices: [SubscriptionInvoice!]!
222
+ }
223
+
224
+ type SubscriptionPayment {
225
+ _id: String!
226
+ payment: Payment!
227
+ subscriber: PlanSubscription!
228
+ }
229
+
230
+ type AWSS3File {
231
+ _id: String!
232
+ name: String
233
+ contentType: String
234
+ size: Float
235
+ useType: String
236
+ url: String!
237
+ key: String!
238
+ pendingDelete: Boolean!
239
+ }
240
+
241
+ type MagicLink {
242
+ _id: String!
243
+ code: String!
244
+ type: String!
245
+ url: String!
246
+ expires: DateTime
247
+ data: String
248
+ isExpired: Boolean!
249
+ }
250
+
251
+ type VerificationCode {
252
+ _id: String!
253
+ type: String
254
+ recipient: String
255
+ expires: DateTime
256
+ data: String
257
+ isExpired: Boolean!
258
+ createdDate: DateTime!
259
+ }
260
+
261
+ type ErrorInfo {
262
+ errorCode: Float!
263
+ errorMessage: String!
264
+ }
265
+
266
+ type HttpRequestField {
267
+ key: String!
268
+ value: String!
269
+ }
270
+
271
+ type AWSS3UploadUrl {
272
+ uploadUrl: String!
273
+ fields: [HttpRequestField!]!
274
+ downloadUrl: String!
275
+ bucket: String!
276
+ key: String!
277
+ }
278
+
279
+ type AWSS3CallResult {
280
+ httpStatus: Float!
281
+ result: String!
282
+ message: String!
283
+ errors: [String!]
284
+ }
285
+
286
+ type DatabaseFile {
287
+ _id: String!
288
+ identifier: String!
289
+ version: String!
290
+ contentType: String!
291
+ updated: DateTime!
292
+ created: DateTime!
293
+ }
294
+
295
+ type TextDatabaseFile {
296
+ _id: String!
297
+ identifier: String!
298
+ version: String!
299
+ contentType: String!
300
+ updated: DateTime!
301
+ created: DateTime!
302
+ content: String!
303
+ }
304
+
305
+ type CodeVerificationResponse {
306
+ result: String!
307
+ code: VerificationCode
308
+ error: ErrorInfo
309
+ }
310
+
311
+ type Industry {
312
+ _id: String!
313
+ name: String!
314
+ }
315
+
316
+ type SponsorStats {
317
+ sponsoredAthletes: Float!
318
+ totalBrands: Float!
319
+ activeCampaigns: Float!
320
+ activeSponsorships: Float!
321
+ }
322
+
323
+ type City {
324
+ _id: String!
325
+ name: String!
326
+ localizedName: String!
327
+ state: State
328
+ latitude: Float
329
+ longitude: Float
330
+ timezone: String
331
+ }
332
+
333
+ type State {
334
+ _id: String!
335
+ name: String!
336
+ country: Country
337
+ cities: [City!]
338
+ }
339
+
340
+ type Country {
341
+ _id: String!
342
+ name: String!
343
+ states: [State!]
344
+ }
345
+
346
+ type AgeQualification {
347
+ type: String!
348
+ value: Float!
349
+ operator: String!
350
+ }
351
+
352
+ type GenderQualification {
353
+ type: String!
354
+ operator: String!
355
+ values: [String!]!
356
+ }
357
+
358
+ type ScoreQualification {
359
+ type: String!
360
+ scoreType: String!
361
+ operator: String!
362
+ value: Float!
363
+ }
364
+
365
+ type LocationQualification {
366
+ type: String!
367
+ operator: String!
368
+ countries: [Country!]!
369
+ states: [State!]!
370
+ cities: [City!]!
371
+ }
372
+
373
+ type NationalityQualification {
374
+ type: String!
375
+ operator: String!
376
+ countries: [Country!]!
377
+ }
378
+
379
+ type DistanceQualification {
380
+ type: String!
381
+ maxDistance: Float!
382
+ latitude: Float
383
+ longitude: Float
384
+ cityId: String
385
+ }
386
+
387
+ type SportsQualification {
388
+ type: String!
389
+ sports: [String!]!
390
+ operator: String!
391
+ }
392
+
393
+ type SportsLevelQualification {
394
+ type: String!
395
+ operator: String!
396
+ level: String!
397
+ }
398
+
399
+ type AthleteCriteria {
400
+ _id: String!
401
+ label: String
402
+ qualifications: [QualificationTypeUnion!]
403
+
404
+ """Minimum age requirement"""
405
+ minAge: Int
406
+
407
+ """Maximum age requirement"""
408
+ maxAge: Int
409
+
410
+ """Allowed genders (male, female, other)"""
411
+ allowedGenders: [String!]
412
+ }
413
+
414
+ union QualificationTypeUnion = AgeQualification | GenderQualification | ScoreQualification | LocationQualification | NationalityQualification | DistanceQualification | SportsQualification | SportsLevelQualification
415
+
416
+ type SponsorshipItem {
417
+ _id: String!
418
+ quantity: Float!
419
+ title: String!
420
+ value: Float!
421
+ type: String!
422
+ }
423
+
424
+ type SponsorshipCommitment {
425
+ _id: String!
426
+ title: String!
427
+ details: String
428
+ hashTags: String!
429
+ media: String!
430
+ actionType: String!
431
+ frequency: Float
432
+ periodicity: String!
433
+ autoMeasurable: Boolean!
434
+ }
435
+
436
+ type Duration {
437
+ length: Float!
438
+ unit: String!
439
+ }
440
+
441
+ type SponsorshipStats {
442
+ totalSponsorships: Float
443
+ totalApplications: Float
444
+ newApplications: Float
445
+ discardedApplications: Float
446
+ selectedApplications: Float
447
+ approvedApplications: Float
448
+ grantedSponsorships: Float
449
+ remainingSponsorships: Float
450
+ }
451
+
452
+ type SponsorshipTranslation {
453
+ _id: String!
454
+ sponsorshipId: String!
455
+ language: String!
456
+ title: String
457
+ description: String
458
+ terms: String
459
+ banner: AWSS3File
460
+ }
461
+
462
+ type Sponsorship {
463
+ _id: String!
464
+ title: String!
465
+ description: String
466
+ cashValue: Float!
467
+ otherValue: Float!
468
+ brand: Brand
469
+ banner: AWSS3File
470
+ criteria: AthleteCriteria
471
+ deadline: DateTime
472
+ startDate: DateTime
473
+ duration: Duration!
474
+ sponsor: Sponsor
475
+ sponsorshipItems: [SponsorshipItem!]
476
+ commitments: [SponsorshipCommitment!]
477
+ terms: String
478
+ stats: SponsorshipStats
479
+ isPrivate: Boolean!
480
+ approved: Boolean!
481
+ published: Boolean!
482
+ translations: [SponsorshipTranslation!]
483
+ }
484
+
485
+ type Sponsor {
486
+ _id: String!
487
+ name: String!
488
+ description: String
489
+ tenant: Tenant
490
+ industry: Industry
491
+ stats: SponsorStats
492
+ brands: [SponsorBrand!]
493
+ sponsorships: [Sponsorship!]
494
+ approved: Boolean!
495
+ }
496
+
497
+ type SponsorBrand {
498
+ _id: String!
499
+ sponsor: Sponsor
500
+ authorizedUse: Boolean!
501
+ isAuthorizer: Boolean!
502
+ }
503
+
504
+ type BrandStats {
505
+ campaigns: Float
506
+ sponsorships: Float
507
+ sports: Float
508
+ athletes: Float
509
+ }
510
+
511
+ type BrandTranslation {
512
+ _id: String!
513
+ brandId: String!
514
+ language: String!
515
+ name: String
516
+ slogan: String
517
+ description: String
518
+ logo: AWSS3File
519
+ banner: AWSS3File
520
+ }
521
+
522
+ type Brand {
523
+ _id: String!
524
+ name: String!
525
+ slogan: String
526
+ website: String
527
+ affiliateLink: String
528
+ description: String
529
+ approved: Boolean!
530
+ published: Boolean!
531
+ logo: AWSS3File
532
+ banner: AWSS3File
533
+ stats: BrandStats
534
+ operatorIds: [String!]
535
+ translations: [BrandTranslation!]
536
+ sponsors: [SponsorBrand!]
537
+ }
538
+
539
+ type StravaTpiRideDto {
540
+ distanceKm: Float!
541
+ distanceKmLast: Float!
542
+ elapsedTimeMin: Float!
543
+ elapsedTimeMinLast: Float!
544
+ averageSpeedKmh: Float!
545
+ averageSpeedKmhLast: Float!
546
+ maxSpeedKmh: Float!
547
+ maxSpeedKmhLast: Float!
548
+ averageHeartRateBpm: Float!
549
+ averageHeartRateBpmLast: Float!
550
+ maxHeartRateBpm: Float!
551
+ maxHeartRateBpmLast: Float!
552
+ averageCadenceStm: Float!
553
+ averageCadenceStmLast: Float!
554
+ lastDate: DateTime
555
+ country: String
556
+ state: String
557
+ city: String
558
+ tpi: Float!
559
+ }
560
+
561
+ type StravaTpiRunDto {
562
+ distanceKm: Float!
563
+ distanceKmLast: Float!
564
+ elapsedTimeMin: Float!
565
+ elapsedTimeMinLast: Float!
566
+ averageSpeedKmh: Float!
567
+ averageSpeedKmhLast: Float!
568
+ maxSpeedKmh: Float!
569
+ maxSpeedKmhLast: Float!
570
+ averageHeartRateBpm: Float!
571
+ averageHeartRateBpmLast: Float!
572
+ maxHeartRateBpm: Float!
573
+ maxHeartRateBpmLast: Float!
574
+ averageCadenceStm: Float!
575
+ averageCadenceStmLast: Float!
576
+ elevHigh: Float!
577
+ elevHighLast: Float!
578
+ elevLow: Float!
579
+ elevLowLast: Float!
580
+ lastDate: DateTime
581
+ country: String
582
+ state: String
583
+ city: String
584
+ tpi: Float!
585
+ }
586
+
587
+ type StravaTpiSwimDto {
588
+ distanceKm: Float!
589
+ distanceKmLast: Float!
590
+ elapsedTimeMin: Float!
591
+ elapsedTimeMinLast: Float!
592
+ averageSpeedKmh: Float!
593
+ averageSpeedKmhLast: Float!
594
+ maxSpeedKmh: Float!
595
+ maxSpeedKmhLast: Float!
596
+ averageHeartRateBpm: Float!
597
+ averageHeartRateBpmLast: Float!
598
+ maxHeartRateBpm: Float!
599
+ maxHeartRateBpmLast: Float!
600
+ averageCadenceStm: Float!
601
+ averageCadenceStmLast: Float!
602
+ lastDate: DateTime
603
+ country: String
604
+ state: String
605
+ city: String
606
+ tpi: Float!
607
+ }
608
+
609
+ type FollowStats {
610
+ followers: Float!
611
+ followed: Float!
612
+ raves: Float!
613
+ favorites: Float!
614
+ }
615
+
616
+ type Sport {
617
+ _id: String!
618
+ name: String!
619
+ resultType: String!
620
+ verified: Boolean
621
+ priority: Float
622
+ }
623
+
624
+ type VtxScores {
625
+ vtxScore: Float!
626
+ socialScore: Float!
627
+ trainingScore: Float!
628
+ competitionScore: Float!
629
+ }
630
+
631
+ type SportLevelTranslation {
632
+ _id: String!
633
+ language: String!
634
+ label: String!
635
+ }
636
+
637
+ type SportLevel {
638
+ _id: String!
639
+ label: String!
640
+ index: Float!
641
+ translations: [SportLevelTranslation!]
642
+ }
643
+
644
+ type Ranking {
645
+ scope: String!
646
+ scopeId: String!
647
+ scopeName: String!
648
+ position: Float!
649
+ total: Float!
650
+ }
651
+
652
+ type AthleteRankings {
653
+ worldRanking: Ranking
654
+ countryRanking: Ranking
655
+ stateRanking: Ranking
656
+ cityRanking: Ranking
657
+ }
658
+
659
+ type AthleteTeamMember {
660
+ _id: String!
661
+ firstName: String
662
+ lastName: String
663
+ screenName: String
664
+ vtxScore: Float
665
+ profilePicture: AWSS3File
666
+ }
667
+
668
+ type AthleteTeam {
669
+ _id: String!
670
+ athlete: AthleteTeamMember
671
+ sport: Sport
672
+ role: String!
673
+ status: String!
674
+ joinedAt: DateTime
675
+ leftAt: DateTime
676
+ }
677
+
678
+ type TeamClubReference {
679
+ _id: String!
680
+ name: String!
681
+ logo: AWSS3File
682
+ }
683
+
684
+ type Team {
685
+ _id: String!
686
+ name: String!
687
+ description: String
688
+ sports: [Sport!]
689
+ approved: Boolean
690
+ logo: AWSS3File
691
+ banner: AWSS3File
692
+ club: TeamClubReference
693
+ athletes: [AthleteTeam!]
694
+ joinPolicy: String
695
+ maxRosterSize: Int
696
+ visibility: String
697
+ stripeAccountId: String
698
+ vtxScore: Float
699
+ }
700
+
701
+ type WorldLocation {
702
+ _id: String!
703
+ userProvidedLatitude: Float
704
+ userProvidedLongitude: Float
705
+ cityNameGeocode: String
706
+ stateNameGeocode: String
707
+ countryIso2CodeGeocode: String
708
+ timeZoneGeocode: String
709
+ latitudeGeocode: Float
710
+ longitudeGeocode: Float
711
+ city: City
712
+ }
713
+
714
+ type SportsEvent {
715
+ _id: String!
716
+ name: String!
717
+ mainSport: Sport
718
+ eventWebSite: String
719
+ startDate: DateTime!
720
+ endDate: DateTime
721
+ verified: Boolean!
722
+ banner: AWSS3File
723
+ location: WorldLocation
724
+ eventLevel: String
725
+ registeredAthletesCount: Float
726
+ }
727
+
728
+ type AthleteCompetitionResult {
729
+ _id: String!
730
+ resultType: String!
731
+ position: Float
732
+ totalParticipants: Float
733
+ score: String
734
+ finishTimeMS: Float
735
+ resultWebLink: String
736
+ outcome: String!
737
+ adversary: String
738
+ genderPosition: Float
739
+ genderParticipants: Float
740
+ categoryPosition: Float
741
+ categoryParticipants: Float
742
+ categoryName: String
743
+ pointsEarned: Float
744
+ }
745
+
746
+ type BudgetItem {
747
+ _id: String!
748
+ quantity: Float!
749
+ concept: String!
750
+ itemCost: Float!
751
+ unit: String
752
+ }
753
+
754
+ type Budget {
755
+ _id: String!
756
+ initialFunds: Float!
757
+ totalRequired: Float!
758
+ items: [BudgetItem!]
759
+ }
760
+
761
+ type PhotoAlbum {
762
+ _id: String!
763
+ photo: AWSS3File
764
+ }
765
+
766
+ type Album {
767
+ _id: String!
768
+ label: String!
769
+ description: String
770
+ photos: [PhotoAlbum!]
771
+ displayIndex: Float!
772
+ competitionId: String
773
+ visibility: String!
774
+ }
775
+
776
+ type AthleteCompetition {
777
+ _id: String!
778
+ event: SportsEvent!
779
+ participationDate: DateTime
780
+ competitionNumber: String
781
+ result: AthleteCompetitionResult
782
+ fundRaisingCampaignIds: [String!]
783
+ budget: Budget
784
+ albums: [Album!]
785
+ }
786
+
787
+ type MembershipOrganizationReference {
788
+ _id: String!
789
+ shortName: String
790
+ acronym: String
791
+ fullName: String!
792
+ website: String
793
+ verified: Boolean!
794
+ logo: AWSS3File
795
+ country: Country
796
+ sport: Sport
797
+ }
798
+
799
+ type MembershipOrganization {
800
+ _id: String!
801
+ shortName: String
802
+ acronym: String
803
+ fullName: String!
804
+ website: String
805
+ verified: Boolean!
806
+ logo: AWSS3File
807
+ country: Country
808
+ sport: Sport
809
+ memberships: [AthleteMembership!]
810
+ }
811
+
812
+ type AthleteMembership {
813
+ _id: String!
814
+ organization: MembershipOrganizationReference!
815
+ athlete: AthleteReference!
816
+ membershipNumber: String
817
+ membershipType: String
818
+ issueDate: DateTime
819
+ expirationDate: DateTime
820
+ }
821
+
822
+ type NewsLink {
823
+ _id: String!
824
+ title: String!
825
+ url: String!
826
+ abstract: String
827
+ }
828
+
829
+ type Channel {
830
+ _id: String!
831
+ type: String!
832
+ handle: String
833
+ url: String!
834
+ linked: Boolean!
835
+ }
836
+
837
+ type AthletePreferences {
838
+ _id: String!
839
+ showProfileHelper: Boolean!
840
+ defaultAlbum: Album
841
+ }
842
+
843
+ type Video {
844
+ _id: String!
845
+ source: String!
846
+ url: String!
847
+ sourceData: String!
848
+ }
849
+
850
+ type FundRaisingCampaign {
851
+ _id: String!
852
+ athlete: AthleteReference!
853
+ budgetMode: String!
854
+ status: String!
855
+ title: String!
856
+ slug: String
857
+ motivation: String
858
+ website: String
859
+ fundsRequired: Float!
860
+ initialFundsObtained: Float!
861
+ fundsObtained: Float!
862
+ location: WorldLocation
863
+ createdDate: DateTime!
864
+ endingDate: DateTime!
865
+ budget: Budget
866
+ competitions: [AthleteCompetition!]
867
+ vtxComissionPct: Float!
868
+ video: Video
869
+ coverImage: AWSS3File
870
+ thankYouMessage: String
871
+ thankYouMediaUrl: String
872
+ autoSendThankYou: Boolean!
873
+ }
874
+
875
+ type StripeCapabilityType {
876
+ acss_debit_payments: String
877
+ affirm_payments: String
878
+ afterpay_clearpay_payments: String
879
+ alma_payments: String
880
+ amazon_pay_payments: String
881
+ au_becs_debit_payments: String
882
+ bacs_debit_payments: String
883
+ bancontact_payments: String
884
+ bank_transfer_payments: String
885
+ blik_payments: String
886
+ boleto_payments: String
887
+ card_issuing: String
888
+ card_payments: String
889
+ cartes_bancaires_payments: String
890
+ cashapp_payments: String
891
+ eps_payments: String
892
+ fpx_payments: String
893
+ gb_bank_transfer_payments: String
894
+ giropay_payments: String
895
+ grabpay_payments: String
896
+ ideal_payments: String
897
+ india_international_payments: String
898
+ jcb_payments: String
899
+ jp_bank_transfer_payments: String
900
+ kakao_pay_payments: String
901
+ klarna_payments: String
902
+ konbini_payments: String
903
+ kr_card_payments: String
904
+ legacy_payments: String
905
+ link_payments: String
906
+ mobilepay_payments: String
907
+ multibanco_payments: String
908
+ mx_bank_transfer_payments: String
909
+ naver_pay_payments: String
910
+ oxxo_payments: String
911
+ p24_payments: String
912
+ pay_by_bank_payments: String
913
+ payco_payments: String
914
+ paynow_payments: String
915
+ promptpay_payments: String
916
+ revolut_pay_payments: String
917
+ samsung_pay_payments: String
918
+ sepa_bank_transfer_payments: String
919
+ sepa_debit_payments: String
920
+ sofort_payments: String
921
+ swish_payments: String
922
+ tax_reporting_us_1099_k: String
923
+ tax_reporting_us_1099_misc: String
924
+ transfers: String
925
+ treasury: String
926
+ twint_payments: String
927
+ us_bank_account_ach_payments: String
928
+ us_bank_transfer_payments: String
929
+ zip_payments: String
930
+ }
931
+
932
+ type StripeRequirementAlternativeType {
933
+ alternative_fields_due: [String!]!
934
+ original_fields_due: [String!]!
935
+ }
936
+
937
+ type StripeFutureRequirementAlternativeType {
938
+ alternative_fields_due: [String!]!
939
+ original_fields_due: [String!]!
940
+ }
941
+
942
+ type StripeErrorType {
943
+ code: String!
944
+ reason: String!
945
+ requirement: String!
946
+ }
947
+
948
+ type StripeRequirementType {
949
+ alternatives: [StripeRequirementAlternativeType!]
950
+ current_deadline: DateTime
951
+ currently_due: [String!]
952
+ disabled_reason: String
953
+ errors: [StripeErrorType!]
954
+ eventually_due: [String!]
955
+ past_due: [String!]
956
+ pending_verification: [String!]
957
+ }
958
+
959
+ type StripeFutureRequirementType {
960
+ alternatives: [StripeFutureRequirementAlternativeType!]
961
+ current_deadline: DateTime
962
+ currently_due: [String!]
963
+ disabled_reason: String
964
+ errors: [StripeErrorType!]
965
+ eventually_due: [String!]
966
+ past_due: [String!]
967
+ pending_verification: [String!]
968
+ }
969
+
970
+ type StripeAccount {
971
+ id: String!
972
+ object: String!
973
+ business_type: String
974
+ country: String!
975
+ email: String
976
+ capabilities: StripeCapabilityType
977
+ requirements: StripeRequirementType
978
+ future_requirements: StripeFutureRequirementType
979
+ type: String!
980
+ charges_enabled: Boolean!
981
+ payouts_enabled: Boolean!
982
+ created: DateTime
983
+ default_currency: String
984
+ }
985
+
986
+ type StripeAccountReference {
987
+ _id: String!
988
+ stripeAccountId: String!
989
+ account: StripeAccount
990
+ }
991
+
992
+ type HistoricalScore {
993
+ _id: String!
994
+ scoreType: String!
995
+ score: Float!
996
+ date: DateTime!
997
+ athleteId: String!
998
+ }
999
+
1000
+ type AthleteReference {
1001
+ _id: String!
1002
+ firstName: String!
1003
+ lastName: String!
1004
+ screenName: String
1005
+ dob: DateTime
1006
+ lgbt: Boolean
1007
+ competitionGender: String
1008
+ country: Country
1009
+ location: WorldLocation
1010
+ trainer: String
1011
+ trainerUrl: String
1012
+ followStats: FollowStats
1013
+ mainSport: Sport!
1014
+ mainSportLevel: SportLevel!
1015
+ scores: VtxScores!
1016
+ rankings: AthleteRankings
1017
+ totalUpcomingCompetitions: Float
1018
+ totalPastCompetitions: Float
1019
+ profilePicture: AWSS3File
1020
+ cardPicture: AWSS3File
1021
+ bannerPicture: AWSS3File
1022
+ aboutMe: String
1023
+ biography: String
1024
+ preferences: AthletePreferences!
1025
+ suspended: Boolean!
1026
+ onboardingComplete: Boolean
1027
+ onboardingStep: Float
1028
+ }
1029
+
1030
+ type Athlete {
1031
+ _id: String!
1032
+ firstName: String!
1033
+ lastName: String!
1034
+ screenName: String
1035
+ dob: DateTime
1036
+ lgbt: Boolean
1037
+ competitionGender: String
1038
+ country: Country
1039
+ location: WorldLocation
1040
+ trainer: String
1041
+ trainerUrl: String
1042
+ followStats: FollowStats
1043
+ mainSport: Sport!
1044
+ mainSportLevel: SportLevel!
1045
+ scores: VtxScores!
1046
+ rankings: AthleteRankings
1047
+ totalUpcomingCompetitions: Float
1048
+ totalPastCompetitions: Float
1049
+ profilePicture: AWSS3File
1050
+ cardPicture: AWSS3File
1051
+ bannerPicture: AWSS3File
1052
+ aboutMe: String
1053
+ biography: String
1054
+ preferences: AthletePreferences!
1055
+ suspended: Boolean!
1056
+ onboardingComplete: Boolean
1057
+ onboardingStep: Float
1058
+ allSports: [Sport!]
1059
+ teams: [Team!]
1060
+ sponsorBrands: [Brand!]
1061
+ competitions: [AthleteCompetition!]
1062
+ affiliations: [AthleteMembership!]
1063
+ newsLinks: [NewsLink!]
1064
+ channels: [Channel!]
1065
+ currentCampaign: FundRaisingCampaign
1066
+ fundingCampaigns: [FundRaisingCampaign!]
1067
+ stripeAccountReference: StripeAccountReference
1068
+ albums: [Album!]
1069
+ historicalScores: [HistoricalScore!]
1070
+ signedAgreements: [SignedAgreement!]
1071
+ }
1072
+
1073
+ type CheckoutSession {
1074
+ _id: ID!
1075
+ type: String
1076
+ estimatedStripeComission: Float
1077
+ stripeSessionId: String!
1078
+ stripeAccountId: String!
1079
+ donationAmount: Float!
1080
+ fromEmail: String
1081
+ confirmed: Boolean!
1082
+ completed: Boolean!
1083
+ completedDate: DateTime
1084
+ createdDate: DateTime!
1085
+ }
1086
+
1087
+ type FundingCheckoutSessionData {
1088
+ _id: ID!
1089
+ session: CheckoutSession
1090
+ fromName: String
1091
+ paidToAthlete: Float
1092
+ paidToVtx: Float
1093
+ fundingCampaign: FundRaisingCampaign
1094
+ mode: DonationMode!
1095
+ athleteId: String!
1096
+ athleteName: String!
1097
+ fromPhone: String
1098
+ message: String
1099
+ }
1100
+
1101
+ type SponsorAthleteInvitation {
1102
+ _id: String!
1103
+ name: String
1104
+ email: String!
1105
+ dateSent: DateTime!
1106
+ sponsor: Sponsor!
1107
+ magicLink: MagicLink!
1108
+ brand: Brand
1109
+ status: String!
1110
+ }
1111
+
1112
+ type StripeSession {
1113
+ account: String!
1114
+ client_secret: String!
1115
+ expires_at: Float!
1116
+ livemode: Boolean!
1117
+ }
1118
+
1119
+ type StripeCheckoutSession {
1120
+ id: String!
1121
+ vtxCheckoutSessionId: String!
1122
+ client_secret: String!
1123
+ expires_at: Float!
1124
+ livemode: Boolean!
1125
+ url: String!
1126
+ }
1127
+
1128
+ type StravaAthleteData {
1129
+ id: Float!
1130
+ username: String
1131
+ firstname: String!
1132
+ lastname: String!
1133
+ bio: String
1134
+ city: String
1135
+ state: String
1136
+ country: String
1137
+ sex: String
1138
+ premium: Boolean!
1139
+ profile: String
1140
+ created_at: String
1141
+ updated_at: String
1142
+ }
1143
+
1144
+ type InstagramCursors {
1145
+ before: String
1146
+ after: String
1147
+ }
1148
+
1149
+ type InstagramPaging {
1150
+ cursors: InstagramCursors
1151
+ next: String
1152
+ }
1153
+
1154
+ type InstagramMetric {
1155
+ name: String!
1156
+ period: String!
1157
+ values: String!
1158
+ }
1159
+
1160
+ type InstagramInsights {
1161
+ data: [InstagramMetric!]
1162
+ }
1163
+
1164
+ type InstagramMediaItem {
1165
+ id: String!
1166
+ caption: String
1167
+ media_type: String!
1168
+ media_url: String
1169
+ permalink: String!
1170
+ thumbnail_url: String
1171
+ timestamp: String!
1172
+ username: String!
1173
+ like_count: Float
1174
+ comments_count: Float
1175
+ insights: InstagramInsights
1176
+ }
1177
+
1178
+ type InstagramMediaData {
1179
+ data: [InstagramMediaItem!]
1180
+ paging: InstagramPaging
1181
+ }
1182
+
1183
+ type InstagramUserData {
1184
+ user_id: String!
1185
+ username: String!
1186
+ name: String
1187
+ account_type: String
1188
+ followers_count: String
1189
+ media_count: Float
1190
+ }
1191
+
1192
+ type AthleteIntegrationReference {
1193
+ _id: String!
1194
+ athlete: AthleteReference!
1195
+ hasStravaIntegration: Boolean
1196
+ stravaAthleteData: StravaAthleteData
1197
+ hasInstagramIntegration: Boolean
1198
+ instagramUserData: InstagramUserData
1199
+ instagramMediaData: InstagramMediaData
1200
+ }
1201
+
1202
+ type Receipt {
1203
+ receiptId: String!
1204
+ campaignName: String
1205
+ athleteName: String
1206
+ donorName: String!
1207
+ amount: Float!
1208
+ currency: String!
1209
+ dateIssued: DateTime!
1210
+ confirmed: Boolean!
1211
+ message: String
1212
+ }
1213
+
1214
+ type ReceiptUrl {
1215
+ receiptId: String!
1216
+ }
1217
+
1218
+ type BudgetItemReference {
1219
+ _id: String!
1220
+ concept: String!
1221
+ quantity: Float!
1222
+ itemCost: Float!
1223
+ unit: String
1224
+ totalCost: Float!
1225
+ }
1226
+
1227
+ type BudgetReference {
1228
+ _id: String!
1229
+ items: [BudgetItemReference!]!
1230
+ totalAmount: Float!
1231
+ }
1232
+
1233
+ type CompetitionBudgetReference {
1234
+ competitionId: String!
1235
+ eventName: String!
1236
+ budget: BudgetReference!
1237
+ }
1238
+
1239
+ type BaseBudgetData {
1240
+ id: String!
1241
+ dateCreated: String!
1242
+ type: String!
1243
+ name: String!
1244
+ budget: Float!
1245
+ }
1246
+
1247
+ type CompetitionBudgetData {
1248
+ id: String!
1249
+ dateCreated: String!
1250
+ type: String!
1251
+ name: String!
1252
+ budget: Float!
1253
+ eventDate: String!
1254
+ campaign: String
1255
+ items: [BudgetItemReference!]!
1256
+ }
1257
+
1258
+ type CampaignBudgetData {
1259
+ id: String!
1260
+ dateCreated: String!
1261
+ type: String!
1262
+ name: String!
1263
+ budget: Float!
1264
+ endingDate: String!
1265
+ competitions: Float
1266
+ fundsRequired: Float!
1267
+ initialFundsObtained: Float!
1268
+ status: FundingStatus!
1269
+ budgetMode: FundingMode!
1270
+ items: [BudgetItemReference!]
1271
+ competitionBudgets: [CompetitionBudgetReference!]
1272
+ }
1273
+
1274
+ enum FundingStatus {
1275
+ CREATED
1276
+ ACTIVE
1277
+ PAUSED
1278
+ COMPLETED
1279
+ CANCELLED
1280
+ }
1281
+
1282
+ enum FundingMode {
1283
+ FIXED_AMOUNT
1284
+ SINGLE_BUDGET
1285
+ COMPETITION_BUDGETS
1286
+ }
1287
+
1288
+ type BudgetData {
1289
+ competitions: [CompetitionBudgetData!]!
1290
+ campaigns: [CampaignBudgetData!]!
1291
+ }
1292
+
1293
+ type MergeEventsResponse {
1294
+ success: Boolean!
1295
+ mergedEvent: SportsEvent
1296
+ }
1297
+
1298
+ type BudgetItemUnit {
1299
+ _id: String!
1300
+ label: String!
1301
+ }
1302
+
1303
+ type BudgetConcept {
1304
+ _id: String!
1305
+ label: String
1306
+ }
1307
+
1308
+ type Donation {
1309
+ checkoutSessionId: String!
1310
+ fundingCheckoutSessionDataId: String!
1311
+ donationMode: String!
1312
+ donorName: String!
1313
+ donorEmail: String
1314
+ completed: Boolean!
1315
+ confirmed: Boolean!
1316
+ donationAmount: Float!
1317
+ completedDate: DateTime
1318
+ createdDate: DateTime
1319
+ athleteId: String!
1320
+ athleteName: String!
1321
+ message: String
1322
+ athleteReference: AthleteReference
1323
+ campaignReference: FundRaisingCampaign
1324
+ }
1325
+
1326
+ type Member {
1327
+ _id: String!
1328
+ fullName: String!
1329
+ screenName: String
1330
+ memberPicture: AWSS3File
1331
+ donations: [Donation!]!
1332
+ }
1333
+
1334
+ type AdminUserView {
1335
+ _id: String!
1336
+ loginEmail: String!
1337
+ firstName: String!
1338
+ lastName: String!
1339
+ screenName: String!
1340
+ domains: [DomainCredential!]
1341
+ athlete: Athlete
1342
+ member: Member
1343
+ suspended: Boolean!
1344
+ }
1345
+
1346
+ type AdminTransactionFundingDetails {
1347
+ paidToVtx: Float
1348
+ paidToAthlete: Float
1349
+ athleteId: String!
1350
+ athleteName: String!
1351
+ fromName: String
1352
+ fromPhone: String
1353
+ message: String
1354
+ mode: String
1355
+ }
1356
+
1357
+ type AdminTransactionView {
1358
+ _id: ID!
1359
+ createdDate: DateTime!
1360
+ stripeSessionId: String!
1361
+ concept: String
1362
+ donationAmount: Float!
1363
+ fromEmail: String
1364
+ type: String!
1365
+ confirmed: Boolean!
1366
+ completed: Boolean!
1367
+ completedDate: DateTime
1368
+ stripeAccountId: String!
1369
+ fundingDetails: AdminTransactionFundingDetails
1370
+ }
1371
+
1372
+ type Offer {
1373
+ _id: String!
1374
+ name: String
1375
+ label: String!
1376
+ decription: String
1377
+ offerImage: AWSS3File
1378
+ type: String!
1379
+ status: String!
1380
+ discountType: String!
1381
+ discountTypeData: String!
1382
+ conditions: [String!]
1383
+ brand: Brand!
1384
+ sponsor: Sponsor!
1385
+ criteria: AthleteCriteria
1386
+ dateStart: DateTime
1387
+ dateEnd: DateTime
1388
+ dateCreated: DateTime!
1389
+ totalCodes: Int!
1390
+ availableCodes: Int!
1391
+ availableCountries: [Country!]
1392
+ disclaimer: String
1393
+ genericCode: String
1394
+ featured: Boolean!
1395
+ }
1396
+
1397
+ type Promotion {
1398
+ _id: String!
1399
+ name: String
1400
+ label: String!
1401
+ decription: String
1402
+ offerImage: AWSS3File
1403
+ type: String!
1404
+ status: String!
1405
+ discountType: String!
1406
+ discountTypeData: String!
1407
+ conditions: [String!]
1408
+ brand: Brand!
1409
+ sponsor: Sponsor!
1410
+ criteria: AthleteCriteria
1411
+ dateStart: DateTime
1412
+ dateEnd: DateTime
1413
+ dateCreated: DateTime!
1414
+ totalCodes: Int!
1415
+ availableCodes: Int!
1416
+ availableCountries: [Country!]
1417
+ disclaimer: String
1418
+ genericCode: String!
1419
+ featured: Boolean!
1420
+ }
1421
+
1422
+ type CouponCode {
1423
+ _id: String!
1424
+ couponId: String!
1425
+ code: String!
1426
+ expires: DateTime
1427
+ dateCreated: DateTime!
1428
+ }
1429
+
1430
+ type Coupon {
1431
+ _id: String!
1432
+ name: String
1433
+ label: String!
1434
+ decription: String
1435
+ offerImage: AWSS3File
1436
+ type: String!
1437
+ status: String!
1438
+ discountType: String!
1439
+ discountTypeData: String!
1440
+ conditions: [String!]
1441
+ brand: Brand!
1442
+ sponsor: Sponsor!
1443
+ criteria: AthleteCriteria
1444
+ dateStart: DateTime
1445
+ dateEnd: DateTime
1446
+ dateCreated: DateTime!
1447
+ totalCodes: Int!
1448
+ availableCodes: Int!
1449
+ availableCountries: [Country!]
1450
+ disclaimer: String
1451
+ genericCode: String
1452
+ featured: Boolean!
1453
+ couponCodes: [CouponCode!]
1454
+ }
1455
+
1456
+ type OfferClaim {
1457
+ _id: String!
1458
+ offer: Offer!
1459
+ athlete: Athlete!
1460
+ claimedAt: DateTime!
1461
+ code: String
1462
+ }
1463
+
1464
+ type EligibilityResult {
1465
+ status: EligibilityStatus!
1466
+
1467
+ """Keys of criteria that failed (e.g., age, gender, location)"""
1468
+ failedCriteria: [String!]!
1469
+
1470
+ """Keys of criteria with missing athlete data"""
1471
+ missingFields: [String!]!
1472
+
1473
+ """User-facing messages for UI display"""
1474
+ messages: [String!]!
1475
+ }
1476
+
1477
+ """Status of athlete eligibility for an offer"""
1478
+ enum EligibilityStatus {
1479
+ ELIGIBLE
1480
+ NOT_ELIGIBLE
1481
+ UNKNOWN
1482
+ }
1483
+
1484
+ type EnhancedPaginationInfoType {
1485
+ """Current page number (0-based)"""
1486
+ currentPage: Int!
1487
+
1488
+ """Total number of pages"""
1489
+ totalPages: Int!
1490
+
1491
+ """Total number of items across all pages"""
1492
+ totalItems: Int!
1493
+
1494
+ """Number of items per page"""
1495
+ itemsPerPage: Int!
1496
+
1497
+ """Whether there is a next page available"""
1498
+ hasNextPage: Boolean!
1499
+
1500
+ """Whether there is a previous page available"""
1501
+ hasPreviousPage: Boolean!
1502
+
1503
+ """Starting index of items on current page (1-based for display)"""
1504
+ startIndex: Int!
1505
+
1506
+ """Ending index of items on current page (1-based for display)"""
1507
+ endIndex: Int!
1508
+ }
1509
+
1510
+ type OfferWithEligibility {
1511
+ _id: String!
1512
+ name: String
1513
+ label: String!
1514
+ decription: String
1515
+ offerImage: AWSS3File
1516
+ type: String!
1517
+ status: String!
1518
+ discountType: String!
1519
+ discountTypeData: String!
1520
+ conditions: [String!]
1521
+ brand: Brand!
1522
+ sponsor: Sponsor!
1523
+ criteria: AthleteCriteria
1524
+ dateStart: DateTime
1525
+ dateEnd: DateTime
1526
+ dateCreated: DateTime!
1527
+ totalCodes: Int!
1528
+ availableCodes: Int!
1529
+ availableCountries: [Country!]
1530
+ disclaimer: String
1531
+ featured: Boolean!
1532
+
1533
+ """Athlete eligibility status for this offer"""
1534
+ eligibility: EligibilityResult!
1535
+ }
1536
+
1537
+ type PaginatedOffersWithEligibility {
1538
+ items: [OfferWithEligibility!]!
1539
+ pagination: EnhancedPaginationInfoType!
1540
+ }
1541
+
1542
+ type PaginatedBrands {
1543
+ items: [Brand!]!
1544
+ pagination: EnhancedPaginationInfoType!
1545
+ }
1546
+
1547
+ type PaginatedSponsors {
1548
+ items: [Sponsor!]!
1549
+ pagination: EnhancedPaginationInfoType!
1550
+ }
1551
+
1552
+ type EditValueResponse {
1553
+ field: String!
1554
+ oldValue: String
1555
+ newValue: String
1556
+ changed: Boolean!
1557
+ }
1558
+
1559
+ type ErrorType {
1560
+ code: Float!
1561
+ message: String!
1562
+ }
1563
+
1564
+ type DeleteValuesResponse {
1565
+ deleted: [String!]!
1566
+ failedToDelete: [String!]!
1567
+ failureReason: [ErrorType!]!
1568
+ result: String!
1569
+ }
1570
+
1571
+ type DeleteSingleValueResponse {
1572
+ idToDelete: String!
1573
+ deleted: Boolean!
1574
+ failureReason: ErrorType
1575
+ }
1576
+
1577
+ type ScoreRefreshDetail {
1578
+ status: ForceScoreRefreshStatus!
1579
+ message: String
1580
+ }
1581
+
1582
+ enum ForceScoreRefreshStatus {
1583
+ success
1584
+ failed
1585
+ skipped
1586
+ }
1587
+
1588
+ type RefreshDiagnostics {
1589
+ activitiesDeleted: Int
1590
+ activitiesFetched: Int
1591
+ activitiesDateRange: String
1592
+ activityRefsSaved: Int
1593
+ historicalDatesProcessed: Int
1594
+ historicalRebuildStatus: String
1595
+ }
1596
+
1597
+ type ForceScoreRefreshResult {
1598
+ athleteId: String!
1599
+ athleteName: String
1600
+ status: ForceScoreRefreshStatus!
1601
+ message: String
1602
+ tpi: ScoreRefreshDetail
1603
+ spi: ScoreRefreshDetail
1604
+ api: ScoreRefreshDetail
1605
+ diagnostics: RefreshDiagnostics
1606
+ }
1607
+
1608
+ type ForceScoreRefreshResponse {
1609
+ results: [ForceScoreRefreshResult!]!
1610
+ successCount: Float!
1611
+ failureCount: Float!
1612
+ skippedCount: Float!
1613
+ }
1614
+
1615
+ type SortOrder {
1616
+ sortField: String!
1617
+ order: String!
1618
+ }
1619
+
1620
+ type CursorPaginationResponse {
1621
+ sort: SortOrder
1622
+ initialCursorId: String
1623
+ nextCursorId: String
1624
+ initialCursorValue: String
1625
+ nextCursorValue: String
1626
+ limit: Float!
1627
+ retrieved: Float!
1628
+ isLastPage: Boolean!
1629
+ }
1630
+
1631
+ type AthleteQueryResponse {
1632
+ athletes: [Athlete!]!
1633
+ cursor: CursorPaginationResponse!
1634
+ }
1635
+
1636
+ type EditPictureResponse {
1637
+ field: String!
1638
+ oldValue: AWSS3File
1639
+ newValue: AWSS3File
1640
+ changed: Boolean!
1641
+ }
1642
+
1643
+ type AddValuesResponse {
1644
+ added: [String!]!
1645
+ failedToAdd: [String!]
1646
+ failureReason: [ErrorType!]
1647
+ result: String!
1648
+ }
1649
+
1650
+ type ExistValueResponse {
1651
+ exist: Boolean!
1652
+ }
1653
+
1654
+ type DeleteOnboardingAthleteResponse {
1655
+ success: Boolean!
1656
+ athleteId: String
1657
+ error: String
1658
+ }
1659
+
1660
+ type CompetitionDeleteVerificationReason {
1661
+ code: String!
1662
+ message: String!
1663
+ details: String
1664
+ }
1665
+
1666
+ type CompetitionDeleteVerificationResponse {
1667
+ reasons: [CompetitionDeleteVerificationReason!]!
1668
+ }
1669
+
1670
+ type HistoricalScoresPeriod {
1671
+ athleteId: String!
1672
+ athleteFirstName: String!
1673
+ athleteLastName: String!
1674
+ screenName: String!
1675
+ minTimestampInclusive: DateTime!
1676
+ maxTimestampExclusive: DateTime!
1677
+ vtxScores: [HistoricalScore!]
1678
+ tpiScores: [HistoricalScore!]
1679
+ spiScores: [HistoricalScore!]
1680
+ apiScores: [HistoricalScore!]
1681
+ }
1682
+
1683
+ type StripeObject {
1684
+ type: String!
1685
+ json: JSONObject!
1686
+ }
1687
+
1688
+ """
1689
+ The `JSONObject` scalar type represents JSON objects as specified by [ECMA-404](http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf).
1690
+ """
1691
+ scalar JSONObject
1692
+
1693
+ type BrowseCampaignsResult {
1694
+ campaigns: [FundRaisingCampaign!]!
1695
+ featuredPopular: [FundRaisingCampaign!]!
1696
+ featuredEndingSoon: [FundRaisingCampaign!]!
1697
+ total: Int!
1698
+ page: Int!
1699
+ limit: Int!
1700
+ hasMore: Boolean!
1701
+ }
1702
+
1703
+ type ScoreRefreshCapability {
1704
+ athleteId: String!
1705
+ athleteName: String
1706
+ canRefreshTpi: Boolean!
1707
+ canRefreshSpi: Boolean!
1708
+ canRefreshApi: Boolean!
1709
+ tpiReason: String
1710
+ spiReason: String
1711
+ apiReason: String
1712
+ }
1713
+
1714
+ type CheckScoreRefreshCapabilityResponse {
1715
+ capabilities: [ScoreRefreshCapability!]!
1716
+ }
1717
+
1718
+ type OnboardingProgressResponse {
1719
+ success: Boolean!
1720
+ step: Int
1721
+ complete: Boolean
1722
+ athleteId: String
1723
+ error: String
1724
+ }
1725
+
1726
+ type PublicIntegrationStatus {
1727
+ hasStravaIntegration: Boolean!
1728
+ stravaAthleteId: String
1729
+ hasInstagramIntegration: Boolean!
1730
+ instagramUsername: String
1731
+ }
1732
+
1733
+ type PaginatedSports {
1734
+ items: [Sport!]!
1735
+ pagination: EnhancedPaginationInfoType!
1736
+ }
1737
+
1738
+ type Club {
1739
+ _id: String!
1740
+ name: String!
1741
+ description: String
1742
+ sports: [Sport!]
1743
+ logo: AWSS3File
1744
+ banner: AWSS3File
1745
+ location: String
1746
+ website: String
1747
+ membershipType: String!
1748
+ feeStructure: JSON
1749
+ approved: Boolean
1750
+ visibility: String!
1751
+ teams: [Team!]
1752
+ stripeAccountId: String
1753
+ }
1754
+
1755
+ """
1756
+ The `JSON` scalar type represents JSON values as specified by [ECMA-404](http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf).
1757
+ """
1758
+ scalar JSON
1759
+
1760
+ type AthleteClubMember {
1761
+ _id: String!
1762
+ firstName: String
1763
+ lastName: String
1764
+ screenName: String
1765
+ profilePicture: AWSS3File
1766
+ }
1767
+
1768
+ type AthleteClub {
1769
+ _id: String!
1770
+ athlete: AthleteClubMember
1771
+ club: Club
1772
+ role: String!
1773
+ status: String!
1774
+ joinedAt: DateTime
1775
+ leftAt: DateTime
1776
+ }
1777
+
1778
+ type UserImages {
1779
+ profilePictureUrl: String
1780
+ cardPictureUrl: String
1781
+ bannerPictureUrl: String
1782
+ }
1783
+
1784
+ type ValidatedToken {
1785
+ accessToken: String!
1786
+ refreshToken: String!
1787
+ expiresAt: Float!
1788
+ refreshExpiresAt: Float!
1789
+ }
1790
+
1791
+ type DeleteVtxUserResponse {
1792
+ success: Boolean!
1793
+ deletedUserId: String
1794
+ deletedUserEmail: String
1795
+ deletedUserType: String
1796
+ servicesDeleted: [String!]
1797
+ cognitoDeleted: Boolean
1798
+ dbDeleted: Boolean
1799
+ errorMessage: String
1800
+ }
1801
+
1802
+ type PaginatedUsers {
1803
+ items: [AdminUserView!]!
1804
+ pagination: EnhancedPaginationInfoType!
1805
+ }
1806
+
1807
+ type TransactionDetails {
1808
+ stripeCheckoutSessionId: String!
1809
+ vtxCheckoutSessionId: String!
1810
+ checkoutSessionType: String!
1811
+ transactionType: String!
1812
+ confirmed: Boolean!
1813
+ completed: Boolean!
1814
+ currency: String!
1815
+ createdDate: DateTime!
1816
+ email: String
1817
+ name: String
1818
+ phone: String
1819
+ payment_status: String
1820
+ status: String
1821
+ amount_subtotal: Float
1822
+ amount_total: Float
1823
+ completedDate: DateTime
1824
+ athleteDonationReceipt: Receipt
1825
+ }
1826
+
1827
+ type PaginatedEvents {
1828
+ items: [SportsEvent!]!
1829
+ pagination: EnhancedPaginationInfoType!
1830
+ }
1831
+
1832
+ type DonationDates {
1833
+ """Array of unique ISO date strings (YYYY-MM-DD) that have donations"""
1834
+ dates: [String!]!
1835
+
1836
+ """Total number of donations across all dates"""
1837
+ totalDonations: Int!
1838
+ }
1839
+
1840
+ type PaginatedDonations {
1841
+ """Array of donation records"""
1842
+ donations: [Donation!]!
1843
+
1844
+ """Pagination metadata"""
1845
+ pagination: EnhancedPaginationInfoType!
1846
+ }
1847
+
1848
+ type DonationThankYou {
1849
+ _id: String!
1850
+ message: String!
1851
+ mediaUrl: String
1852
+ autoSent: Boolean!
1853
+ emailSent: Boolean!
1854
+ donorEmail: String
1855
+ donorName: String
1856
+ sentDate: DateTime!
1857
+ }
1858
+
1859
+ type CurrencyAmountType {
1860
+ amount: Float!
1861
+ currency: String!
1862
+ }
1863
+
1864
+ type StripeBalance {
1865
+ availableUSD: Float!
1866
+ pendingUSD: Float!
1867
+ currency: String!
1868
+ availableBalances: [CurrencyAmountType!]!
1869
+ pendingBalances: [CurrencyAmountType!]!
1870
+ }
1871
+
1872
+ type StripeTransfer {
1873
+ _id: ID!
1874
+ stripeId: String
1875
+ amount: Float!
1876
+ amount_reversed: Float!
1877
+ currency: String!
1878
+ destination: String
1879
+ description: String
1880
+ reversed: Boolean!
1881
+ livemode: Boolean!
1882
+ transfer_group: String
1883
+ status: StripeTransferStatus!
1884
+ lastError: String
1885
+ json: String!
1886
+ }
1887
+
1888
+ """Status of the Stripe transfer"""
1889
+ enum StripeTransferStatus {
1890
+ not_applicable
1891
+ pending
1892
+ failed
1893
+ completed
1894
+ }
1895
+
1896
+ type UserDomain {
1897
+ _id: String!
1898
+ user: User
1899
+ }
1900
+
1901
+ type PaginatedTransactions {
1902
+ items: [AdminTransactionView!]!
1903
+ pagination: EnhancedPaginationInfoType!
1904
+ }
1905
+
1906
+ type PaginatedOffers {
1907
+ items: [Offer!]!
1908
+ pagination: EnhancedPaginationInfoType!
1909
+ }
1910
+
1911
+ type UploadResult {
1912
+ addedCodes: Int!
1913
+ duplicateCodes: Int!
1914
+ invalidRows: [String!]!
1915
+ }
1916
+
1917
+ type OfferAvailability {
1918
+ available: Boolean!
1919
+ reason: String
1920
+ }
1921
+
1922
+ type LeaderboardEntry {
1923
+ rank: Int!
1924
+
1925
+ """
1926
+ Rank change since yesterday. Positive = moved up, negative = moved down, null = new/no history
1927
+ """
1928
+ rankChange: Int
1929
+ athleteId: String!
1930
+ screenName: String
1931
+ firstName: String
1932
+ lastName: String
1933
+ profilePicture: String
1934
+ score: Float!
1935
+ countryCode: String
1936
+ nationalityCode: String
1937
+ cityName: String
1938
+ countryRank: Int
1939
+ sportId: String
1940
+ vtxScore: Float
1941
+ trainingScore: Float
1942
+ socialScore: Float
1943
+ competitionScore: Float
1944
+ mainSport: String
1945
+ mainSportLevel: String
1946
+ }
1947
+
1948
+ type LeaderboardPagination {
1949
+ page: Int!
1950
+ limit: Int!
1951
+ total: Int!
1952
+ totalPages: Int!
1953
+ }
1954
+
1955
+ type LeaderboardFilters {
1956
+ scoreType: String!
1957
+ sportId: String
1958
+ countryCode: String
1959
+ sportLevelId: String
1960
+ }
1961
+
1962
+ type LeaderboardResponse {
1963
+ entries: [LeaderboardEntry!]!
1964
+ pagination: LeaderboardPagination!
1965
+ filters: LeaderboardFilters!
1966
+ }
1967
+
1968
+ type UserRank {
1969
+ globalRank: Int!
1970
+ countryRank: Int
1971
+ score: Float!
1972
+ scoreType: String!
1973
+ }
1974
+
1975
+ type DashboardSummary {
1976
+ vtxScore: Float!
1977
+ socialScore: Float!
1978
+ trainingScore: Float!
1979
+ competitionScore: Float!
1980
+ lastUpdated: DateTime!
1981
+ }
1982
+
1983
+ type ScoreHistoryEntry {
1984
+ date: DateTime!
1985
+ vtxScore: Float
1986
+ socialScore: Float
1987
+ trainingScore: Float
1988
+ competitionScore: Float
1989
+ }
1990
+
1991
+ type RankHistoryEntry {
1992
+ date: DateTime!
1993
+ globalRank: Int
1994
+ countryRank: Int
1995
+ }
1996
+
1997
+ type RankContext {
1998
+ globalRank: Int
1999
+ countryRank: Int
2000
+
2001
+ """Rank change since previous snapshot"""
2002
+ rankChange: Int
2003
+
2004
+ """
2005
+ e.g., "Top 8%"
2006
+ """
2007
+ percentile: String
2008
+
2009
+ """Points needed to reach next rank"""
2010
+ gapToNext: Float
2011
+
2012
+ """Points buffer above rank below"""
2013
+ gapFromPrevious: Float
2014
+
2015
+ """Total athletes in scope"""
2016
+ totalAthletes: Int
2017
+ }
2018
+
2019
+ type ActivityEntry {
2020
+ id: String!
2021
+ date: DateTime!
2022
+
2023
+ """Activity type (e.g., running, post, competition)"""
2024
+ type: String!
2025
+
2026
+ """Activity-specific metrics"""
2027
+ metrics: JSONObject
2028
+ pointsEarned: Float!
2029
+ counted: Boolean!
2030
+
2031
+ """Reason if not counted"""
2032
+ notCountedReason: String
2033
+
2034
+ """Metric keys where this activity set a new personal record"""
2035
+ prMetrics: [String!]
2036
+ }
2037
+
2038
+ type ActivitiesResponse {
2039
+ items: [ActivityEntry!]!
2040
+ total: Int!
2041
+ hasMore: Boolean!
2042
+ }
2043
+
2044
+ type MetricComparison {
2045
+ name: String!
2046
+ value: Float
2047
+ unit: String
2048
+ athleteAverage: Float
2049
+
2050
+ """Athlete personal best for this metric"""
2051
+ athleteMax: Float
2052
+
2053
+ """Percentage difference from average: ((value - avg) / avg) * 100"""
2054
+ comparisonPercent: Float
2055
+ }
2056
+
2057
+ type ScoreInfo {
2058
+ earned: Float!
2059
+ maxPossible: Float!
2060
+ componentAverage: Float
2061
+ }
2062
+
2063
+ type ActivityDetail {
2064
+ id: String!
2065
+ date: DateTime!
2066
+ type: String!
2067
+
2068
+ """training or social"""
2069
+ category: String!
2070
+ metrics: [MetricComparison!]!
2071
+ scoreInfo: ScoreInfo!
2072
+
2073
+ """Metric keys where this activity set a new personal record"""
2074
+ prMetrics: [String!]
2075
+
2076
+ """Caption/description for social posts"""
2077
+ caption: String
2078
+ }
2079
+
2080
+ type TopMetric {
2081
+ name: String!
2082
+
2083
+ """strong, weak, or average"""
2084
+ status: String!
2085
+ }
2086
+
2087
+ type ComponentSummary {
2088
+ name: String!
2089
+ score: Float!
2090
+ maxScore: Float!
2091
+
2092
+ """Score change from 7 days ago"""
2093
+ trend: Float
2094
+ trendPeriod: String!
2095
+ activityCount: Int!
2096
+ avgScorePerActivity: Float
2097
+ topMetrics: [TopMetric!]!
2098
+
2099
+ """Activity IDs that set a new max for any metric"""
2100
+ newMaxActivityIds: [String!]
2101
+
2102
+ """
2103
+ All-time max values for each metric (e.g., { distance: 42195, duration: 14400 })
2104
+ """
2105
+ metricMaxes: JSONObject
2106
+ }
2107
+
2108
+ type ActivityDateEntry {
2109
+ date: DateTime!
2110
+ category: ActivityCategory!
2111
+ count: Int!
2112
+ types: [String!]!
2113
+ }
2114
+
2115
+ """Category of athlete activity"""
2116
+ enum ActivityCategory {
2117
+ TRAINING
2118
+ SOCIAL
2119
+ COMPETITION
2120
+ }
2121
+
2122
+ type ActivityDatesResponse {
2123
+ dates: [ActivityDateEntry!]!
2124
+ }
2125
+
2126
+ type SocialAggregateType {
2127
+ _id: ID!
2128
+ athleteId: String!
2129
+ platform: Platform!
2130
+ contentType: ContentType
2131
+ periodType: PeriodType!
2132
+ periodLabel: String!
2133
+ periodStart: DateTime!
2134
+ periodEnd: DateTime!
2135
+ totalLikes: Int!
2136
+ totalComments: Int!
2137
+ totalShares: Int!
2138
+ totalSaves: Int!
2139
+ totalReach: Int!
2140
+ totalViews: Int!
2141
+ totalImpressions: Int!
2142
+ postCount: Int!
2143
+ followerCount: Int!
2144
+ avgEngagementRate: Float!
2145
+ avgPostEngagement: Float!
2146
+ }
2147
+
2148
+ """Social media platform"""
2149
+ enum Platform {
2150
+ INSTAGRAM
2151
+ TIKTOK
2152
+ YOUTUBE
2153
+ }
2154
+
2155
+ """Type of social media content"""
2156
+ enum ContentType {
2157
+ POST
2158
+ REEL
2159
+ LIVE
2160
+ SHORT
2161
+ VIDEO
2162
+ }
2163
+
2164
+ """Aggregation period type"""
2165
+ enum PeriodType {
2166
+ DAILY
2167
+ WEEKLY
2168
+ }
2169
+
2170
+ type PostMetricType {
2171
+ id: ID!
2172
+ postId: String!
2173
+ permalink: String
2174
+ thumbnailUrl: String
2175
+ contentType: ContentType
2176
+ caption: String
2177
+ postedAt: DateTime!
2178
+ likes: Int!
2179
+ comments: Int!
2180
+ shares: Int!
2181
+ saves: Int!
2182
+ reach: Int
2183
+ vsAvgPercent: Float!
2184
+ }
2185
+
2186
+ type AveragesType {
2187
+ likes: Float!
2188
+ comments: Float!
2189
+ reach: Float
2190
+ engagementRate: Float!
2191
+ }
2192
+
2193
+ type PostComparisonResultType {
2194
+ posts: [PostMetricType!]!
2195
+ averages: AveragesType!
2196
+ total: Int!
2197
+ hasMore: Boolean!
2198
+ }
2199
+
2200
+ type Notification {
2201
+ id: ID!
2202
+ recipientId: String!
2203
+
2204
+ """Notification type from NotificationType enum"""
2205
+ type: String!
2206
+ title: String!
2207
+ message: String!
2208
+
2209
+ """Icon type identifier (e.g., "trophy", "bell")"""
2210
+ iconType: String
2211
+
2212
+ """URL to a custom icon image"""
2213
+ iconUrl: String
2214
+
2215
+ """Route to navigate when notification is clicked"""
2216
+ actionRoute: String
2217
+
2218
+ """Parameters for the action route"""
2219
+ actionParams: JSON
2220
+
2221
+ """Label for the action button"""
2222
+ actionLabel: String
2223
+ read: Boolean!
2224
+ dismissed: Boolean!
2225
+ createdAt: DateTime!
2226
+ }
2227
+
2228
+ type NotificationListResponse {
2229
+ notifications: [Notification!]!
2230
+ total: Int!
2231
+
2232
+ """Whether there are more notifications to load"""
2233
+ hasMore: Boolean!
2234
+ }
2235
+
2236
+ type UnreadCountResponse {
2237
+ count: Int!
2238
+ }
2239
+
2240
+ type NotificationPreference {
2241
+ id: ID!
2242
+ userId: String!
2243
+
2244
+ """Whether email notifications are enabled"""
2245
+ emailEnabled: Boolean!
2246
+
2247
+ """Whether in-app notifications are enabled"""
2248
+ inAppEnabled: Boolean!
2249
+
2250
+ """Whether push notifications are enabled"""
2251
+ pushEnabled: Boolean!
2252
+
2253
+ """Array of muted notification type keys"""
2254
+ mutedTypes: [String!]
2255
+ }
2256
+
2257
+ type DeviceTokenType {
2258
+ id: ID!
2259
+ userId: String!
2260
+ token: String!
2261
+ platform: String!
2262
+ deviceName: String
2263
+ active: Boolean!
2264
+ createdAt: DateTime!
2265
+ updatedAt: DateTime!
2266
+ }
2267
+
2268
+ type FollowedAthleteInfo {
2269
+ """Athlete ID"""
2270
+ id: String!
2271
+
2272
+ """First name"""
2273
+ firstName: String
2274
+
2275
+ """Last name"""
2276
+ lastName: String
2277
+
2278
+ """Screen name / display name"""
2279
+ screenName: String
2280
+
2281
+ """Profile picture"""
2282
+ profilePicture: AWSS3File
2283
+
2284
+ """Main sport name"""
2285
+ sportName: String
2286
+
2287
+ """VTX Score"""
2288
+ vtxScore: Float
2289
+ }
2290
+
2291
+ type FollowedAthletesListResponse {
2292
+ """List of followed athletes"""
2293
+ athletes: [FollowedAthleteInfo!]!
2294
+
2295
+ """Total count of followed athletes"""
2296
+ total: Int!
2297
+
2298
+ """Whether there are more athletes to load"""
2299
+ hasMore: Boolean!
2300
+ }
2301
+
2302
+ type IsFollowingResponse {
2303
+ """Whether the current user is following the athlete"""
2304
+ isFollowing: Boolean!
2305
+ }
2306
+
2307
+ type EmailCampaignDelivery {
2308
+ """Number of emails successfully delivered"""
2309
+ delivered: Int!
2310
+
2311
+ """Total number of email opens"""
2312
+ opens: Int!
2313
+
2314
+ """Number of unique opens"""
2315
+ uniqueOpens: Int!
2316
+
2317
+ """Total number of link clicks"""
2318
+ clicks: Int!
2319
+
2320
+ """Number of unique clicks"""
2321
+ uniqueClicks: Int!
2322
+
2323
+ """Number of bounced emails"""
2324
+ bounces: Int!
2325
+
2326
+ """Number of spam reports"""
2327
+ spamReports: Int!
2328
+
2329
+ """Timestamp of last stats update from SendGrid"""
2330
+ lastUpdated: DateTime!
2331
+ }
2332
+
2333
+ type EmailSegment {
2334
+ """Segment ID"""
2335
+ _id: String!
2336
+
2337
+ """Segment name"""
2338
+ name: String!
2339
+
2340
+ """Audience filter criteria as JSON"""
2341
+ filters: JSONObject!
2342
+
2343
+ """Admin email who created this segment"""
2344
+ createdBy: String!
2345
+
2346
+ """Creation timestamp"""
2347
+ createdAt: DateTime!
2348
+ }
2349
+
2350
+ type EmailCampaign {
2351
+ """Campaign ID"""
2352
+ _id: String!
2353
+
2354
+ """Email subject line"""
2355
+ subject: String!
2356
+
2357
+ """SendGrid template ID (if using template)"""
2358
+ templateId: String
2359
+
2360
+ """Template name (for audit trail)"""
2361
+ templateName: String
2362
+
2363
+ """Raw HTML content (from rich text editor)"""
2364
+ htmlContent: String
2365
+
2366
+ """Audience filter criteria as JSON"""
2367
+ audienceFilters: JSONObject!
2368
+
2369
+ """Saved segment ID (if using preset)"""
2370
+ segmentId: String
2371
+
2372
+ """Campaign status (draft, scheduled, sending, sent, failed)"""
2373
+ status: String!
2374
+
2375
+ """Scheduled send date/time"""
2376
+ scheduledFor: DateTime
2377
+
2378
+ """Actual sent timestamp"""
2379
+ sentAt: DateTime
2380
+
2381
+ """Total number of recipients"""
2382
+ recipientCount: Int
2383
+
2384
+ """Admin email who created this campaign"""
2385
+ createdBy: String!
2386
+
2387
+ """Creation timestamp"""
2388
+ createdAt: DateTime!
2389
+
2390
+ """Last update timestamp"""
2391
+ updatedAt: DateTime
2392
+
2393
+ """Test email sent timestamp"""
2394
+ testSentAt: DateTime
2395
+
2396
+ """Delivery statistics from SendGrid"""
2397
+ deliveryStats: EmailCampaignDelivery
2398
+
2399
+ """Associated segment (if using saved segment)"""
2400
+ segment: EmailSegment
2401
+ }
2402
+
2403
+ type EmailCampaignPage {
2404
+ """List of campaigns for current page"""
2405
+ campaigns: [EmailCampaign!]!
2406
+
2407
+ """Total count of campaigns matching query"""
2408
+ total: Int!
2409
+ }
2410
+
2411
+ type SendGridTemplate {
2412
+ """Template ID from SendGrid"""
2413
+ id: String!
2414
+
2415
+ """Template name"""
2416
+ name: String!
2417
+
2418
+ """Subject line from the active template version"""
2419
+ subject: String
2420
+
2421
+ """Last update timestamp from SendGrid"""
2422
+ updatedAt: String
2423
+ }
2424
+
2425
+ type AudiencePreviewUser {
2426
+ """User first name"""
2427
+ firstName: String
2428
+
2429
+ """User last name"""
2430
+ lastName: String
2431
+
2432
+ """User email address"""
2433
+ email: String!
2434
+
2435
+ """User type (Athlete, Influencer, etc.)"""
2436
+ userType: String!
2437
+ }
2438
+
2439
+ type AudiencePreview {
2440
+ """Total count of users matching filters"""
2441
+ total: Int!
2442
+
2443
+ """Sample of matching users (~10)"""
2444
+ users: [AudiencePreviewUser!]!
2445
+ }
2446
+
2447
+ type AiCoachMessage {
2448
+ _id: ID!
2449
+
2450
+ """Thread this message belongs to"""
2451
+ threadId: String!
2452
+
2453
+ """Message sender: ASSISTANT or USER"""
2454
+ role: String!
2455
+
2456
+ """Message type: WEEKLY_DIGEST or CHAT"""
2457
+ messageType: String!
2458
+
2459
+ """Message content text"""
2460
+ content: String!
2461
+
2462
+ """Estimated token count for this message"""
2463
+ tokenCount: Int!
2464
+ createdAt: DateTime!
2465
+
2466
+ """Position index within the thread"""
2467
+ index: Int!
2468
+ }
2469
+
2470
+ type AiCoachThread {
2471
+ _id: ID!
2472
+
2473
+ """Athlete who owns this thread"""
2474
+ athleteId: String!
2475
+
2476
+ """Monday of the week this thread covers"""
2477
+ weekStart: String!
2478
+
2479
+ """Thread status: ACTIVE or ARCHIVED"""
2480
+ status: String!
2481
+
2482
+ """AI-generated summary when thread is archived"""
2483
+ summary: String
2484
+
2485
+ """AiCoachContext snapshot for chip selection"""
2486
+ contextSnapshot: JSON
2487
+ createdAt: DateTime!
2488
+ updatedAt: DateTime!
2489
+
2490
+ """Messages in this thread"""
2491
+ messages: [AiCoachMessage!]
2492
+ }
2493
+
2494
+ type AiCoachConfig {
2495
+ """Athlete this config belongs to"""
2496
+ athleteId: String!
2497
+
2498
+ """Whether AI Coach is enabled for this athlete"""
2499
+ enabled: Boolean!
2500
+
2501
+ """Whether nudge notifications are enabled"""
2502
+ nudgesEnabled: Boolean!
2503
+
2504
+ """Preferred coaching focus: BALANCED, TRAINING, SOCIAL, or COMPETITION"""
2505
+ preferredFocus: String!
2506
+ updatedAt: DateTime!
2507
+ }
2508
+
2509
+ type AiCoachNudge {
2510
+ _id: ID!
2511
+
2512
+ """Athlete who owns this nudge"""
2513
+ athleteId: String!
2514
+
2515
+ """Nudge type: PR, MILESTONE, STREAK, INACTIVITY, SPI_SPIKE"""
2516
+ nudgeType: String!
2517
+
2518
+ """Short title for the nudge"""
2519
+ title: String!
2520
+
2521
+ """Nudge body text with details"""
2522
+ body: String!
2523
+
2524
+ """Structured data payload (metrics, scores, etc.)"""
2525
+ data: JSON
2526
+
2527
+ """Whether the athlete has read this nudge"""
2528
+ read: Boolean!
2529
+
2530
+ """When this nudge was created"""
2531
+ createdAt: DateTime!
2532
+
2533
+ """When this nudge expires (null = never)"""
2534
+ expiresAt: DateTime
2535
+ }
2536
+
2537
+ type AiCoachNudgeListResponse {
2538
+ nudges: [AiCoachNudge!]!
2539
+
2540
+ """Total number of matching nudges"""
2541
+ total: Int!
2542
+ }
2543
+
2544
+ type AiCoachUnreadNudgeCountResponse {
2545
+ count: Int!
2546
+ }
2547
+
2548
+ type StripeAccountStatus {
2549
+ chargesEnabled: Boolean!
2550
+ payoutsEnabled: Boolean!
2551
+ detailsSubmitted: Boolean!
2552
+ }
2553
+
2554
+ type TeamVtxScoreHistoryEntry {
2555
+ date: DateTime!
2556
+ score: Float!
2557
+ }
2558
+
2559
+ type TeamLeaderboardEntry {
2560
+ athleteId: String!
2561
+ athleteName: String!
2562
+ athletePhoto: String
2563
+ sport: String
2564
+ vtxScore: Float!
2565
+ rank: Int!
2566
+ tpiScore: Float
2567
+ spiScore: Float
2568
+ apiScore: Float
2569
+ }
2570
+
2571
+ type TeamAnalytics {
2572
+ teamId: String!
2573
+ teamName: String!
2574
+ vtxScore: Float
2575
+ athleteCount: Int!
2576
+ rosterSize: Int
2577
+ vtxScoreHistory: [TeamVtxScoreHistoryEntry!]
2578
+ topPerformers: [TeamLeaderboardEntry!]
2579
+ }
2580
+
2581
+ type TeamRosterOverview {
2582
+ totalActive: Int!
2583
+ totalInactive: Int!
2584
+ recentJoins: Int!
2585
+ recentDepartures: Int!
2586
+ }
2587
+
2588
+ type TeamDashboard {
2589
+ analytics: TeamAnalytics!
2590
+ roster: TeamRosterOverview!
2591
+ leaderboard: [TeamLeaderboardEntry!]!
2592
+ }
2593
+
2594
+ input CreateDatabaseFileDto {
2595
+ identifier: String!
2596
+ version: String! = "1.0.0"
2597
+ contentType: String!
2598
+ }
2599
+
2600
+ input CreateTextDatabaseFileDto {
2601
+ identifier: String!
2602
+ version: String! = "1.0.0"
2603
+ contentType: String!
2604
+ content: String! = ""
2605
+ }
2606
+
2607
+ input UpdateDatabaseFileDto {
2608
+ _id: String!
2609
+ identifier: String
2610
+ version: String
2611
+ contentType: String
2612
+ }
2613
+
2614
+ input UpdateTextDatabaseFileDto {
2615
+ _id: String!
2616
+ identifier: String
2617
+ version: String
2618
+ contentType: String
2619
+ content: String
2620
+ }
2621
+
2622
+ input CloneDatabaseFileDto {
2623
+ _id: String!
2624
+ version: String
2625
+ }
2626
+
2627
+ input FindDatabaseFilesDto {
2628
+ _id: String
2629
+ identifier: String
2630
+ version: String
2631
+ }
2632
+
2633
+ input GetDatabaseFileDto {
2634
+ identifier: String!
2635
+ version: String!
2636
+ }
2637
+
2638
+ input CreateVerificationCodeDto {
2639
+ type: String
2640
+ recipient: String
2641
+ expiresTime: Float = 10
2642
+ expiresUnit: String = "MINUTES"
2643
+ data: String
2644
+ }
2645
+
2646
+ input VerifyCodeDto {
2647
+ codeId: String!
2648
+ enteredCodeValue: String!
2649
+ type: String
2650
+ }
2651
+
2652
+ input DonationCheckoutDto {
2653
+ fundingCampaignId: String!
2654
+ donationAmount: Float!
2655
+ mode: String! = "private"
2656
+ fromName: String
2657
+ fromEmail: String
2658
+ fromPhone: String
2659
+ message: String
2660
+ clientType: String = "WEB"
2661
+ }
2662
+
2663
+ input CreateBrandDto {
2664
+ name: String!
2665
+ description: String
2666
+ slogan: String
2667
+ website: String
2668
+ affiliateLink: String
2669
+ logo: AWSS3UploadedFileDto
2670
+ banner: AWSS3UploadedFileDto
2671
+ translations: [BrandTranslationDto!]
2672
+ sponsorId: String
2673
+ approved: Boolean
2674
+ published: Boolean
2675
+ }
2676
+
2677
+ input AWSS3UploadedFileDto {
2678
+ key: String!
2679
+ useType: String!
2680
+ contentType: String!
2681
+ originalFileName: String
2682
+ fileSize: Float
2683
+ }
2684
+
2685
+ input BrandTranslationDto {
2686
+ brandId: String!
2687
+ language: String!
2688
+ name: String
2689
+ description: String
2690
+ slogan: String
2691
+ logo: AWSS3UploadedFileDto
2692
+ banner: AWSS3UploadedFileDto
2693
+ }
2694
+
2695
+ input BrandQueryDto {
2696
+ """Page number (0-based)"""
2697
+ page: Int = 0
2698
+
2699
+ """Number of items per page"""
2700
+ limit: Int = 25
2701
+
2702
+ """Search query for brand name, slogan, or website"""
2703
+ search: String
2704
+
2705
+ """Filter by approved status"""
2706
+ approved: String
2707
+
2708
+ """Filter by published status"""
2709
+ published: String
2710
+
2711
+ """Sort field"""
2712
+ sortField: String = "name"
2713
+
2714
+ """Sort order"""
2715
+ sortOrder: String = "asc"
2716
+ }
2717
+
2718
+ input CreateSponsorDto {
2719
+ name: String!
2720
+ description: String
2721
+ email: String!
2722
+ }
2723
+
2724
+ input AthleteInvitationDto {
2725
+ email: String!
2726
+ name: String
2727
+ sender: String
2728
+ brandId: String
2729
+ }
2730
+
2731
+ input InviteAthletesDto {
2732
+ language: String = "en"
2733
+ invitations: [AthleteInvitationDto!]!
2734
+ }
2735
+
2736
+ input SponsorQueryDto {
2737
+ """Page number (0-based)"""
2738
+ page: Int = 0
2739
+
2740
+ """Number of items per page"""
2741
+ limit: Int = 25
2742
+
2743
+ """Search query for sponsor name or description"""
2744
+ search: String
2745
+
2746
+ """Filter by approved status"""
2747
+ approved: String
2748
+
2749
+ """Filter by published status"""
2750
+ published: String
2751
+
2752
+ """Sort field"""
2753
+ sortField: String = "name"
2754
+
2755
+ """Sort order"""
2756
+ sortOrder: String = "asc"
2757
+ }
2758
+
2759
+ input CompetitionResultDto {
2760
+ resultType: String!
2761
+ position: Float
2762
+ score: String
2763
+ finishTimeMS: Float
2764
+ resultWebLink: String
2765
+ totalParticipants: Float
2766
+ outcome: String!
2767
+ adversary: String
2768
+ genderPosition: Float
2769
+ genderParticipants: Float
2770
+ categoryPosition: Float
2771
+ categoryParticipants: Float
2772
+ categoryName: String
2773
+ }
2774
+
2775
+ input SetCompetitionResultDto {
2776
+ resultType: String!
2777
+ position: Float
2778
+ score: String
2779
+ finishTimeMS: Float
2780
+ resultWebLink: String
2781
+ totalParticipants: Float
2782
+ outcome: String!
2783
+ adversary: String
2784
+ genderPosition: Float
2785
+ genderParticipants: Float
2786
+ categoryPosition: Float
2787
+ categoryParticipants: Float
2788
+ categoryName: String
2789
+ competitionId: String!
2790
+ }
2791
+
2792
+ input CreateAthleteCompetitionDto {
2793
+ event: String!
2794
+ date: DateTime!
2795
+ eventWebsite: String
2796
+ competitionNumber: String
2797
+ result: CompetitionResultDto
2798
+ cityId: String
2799
+ }
2800
+
2801
+ input CreateAthleteCompetitionForDto {
2802
+ event: String!
2803
+ date: DateTime!
2804
+ eventWebsite: String
2805
+ competitionNumber: String
2806
+ result: CompetitionResultDto
2807
+ cityId: String
2808
+ loginEmail: String!
2809
+ }
2810
+
2811
+ input SortCriteriaDto {
2812
+ sortField: String!
2813
+ order: String! = "ASC"
2814
+ }
2815
+
2816
+ input CursorPositionDto {
2817
+ cursorId: String!
2818
+ cursorFieldValue: String!
2819
+ }
2820
+
2821
+ input CursorPaginationDto {
2822
+ sortCriteria: SortCriteriaDto
2823
+ limit: Float = 25
2824
+ cursorPosition: CursorPositionDto
2825
+ }
2826
+
2827
+ input DeleteSingleValueDto {
2828
+ idToDelete: String!
2829
+ }
2830
+
2831
+ input FundCampaignFilterDto {
2832
+ campaignTitle: String
2833
+ status: String
2834
+ minCompletion: Float
2835
+ maxCompletion: Float
2836
+ minFundsRequired: Float
2837
+ maxFundsRequired: Float
2838
+ minEndingDate: DateTime
2839
+ maxEndingDate: DateTime
2840
+ competitions: [String!]
2841
+ cities: [String!]
2842
+ states: [String!]
2843
+ countries: [String!]
2844
+ }
2845
+
2846
+ input AthleteFilterDto {
2847
+ name: String
2848
+ cities: [String!]
2849
+ states: [String!]
2850
+ countries: [String!]
2851
+ nacionalities: [String!]
2852
+ teams: [String!]
2853
+ currentCampaign: FundCampaignFilterDto
2854
+ sports: [String!]
2855
+ sportLevels: [String!]
2856
+ mainSportOnly: Boolean = true
2857
+ gender: String
2858
+ minAge: Float
2859
+ maxAge: Float
2860
+ minDob: DateTime
2861
+ maxDob: DateTime
2862
+ minVTXScore: Float
2863
+ maxVTXScore: Float
2864
+ minSocialScore: Float
2865
+ maxSocialScore: Float
2866
+ minTrainingScore: Float
2867
+ maxTrainingScore: Float
2868
+ minPerformanceScore: Float
2869
+ maxPerformanceScore: Float
2870
+ futureEventIds: [String!]
2871
+ pastEventIds: [String!]
2872
+ }
2873
+
2874
+ input AthleteQueryDto {
2875
+ cursor: CursorPaginationDto
2876
+ filters: AthleteFilterDto
2877
+ }
2878
+
2879
+ input EditPictureDto {
2880
+ field: String!
2881
+ newPicture: AWSS3UploadedFileDto
2882
+ }
2883
+
2884
+ input UploadAlbumsPicturesDto {
2885
+ label: String!
2886
+ description: String
2887
+ pictures: [AWSS3UploadedFileDto!]
2888
+ albumId: String
2889
+ visibility: String
2890
+ competitionId: String
2891
+ }
2892
+
2893
+ input DeleteValuesDto {
2894
+ idsToDelete: [String!]!
2895
+ allOrNone: Boolean = true
2896
+ }
2897
+
2898
+ input existValueDto {
2899
+ Value: String!
2900
+ }
2901
+
2902
+ input GetMyHistoricalScoresDto {
2903
+ minTimestampInclusive: DateTime!
2904
+ maxTimestampExclusive: DateTime!
2905
+ scoreTypes: [String!]!
2906
+ }
2907
+
2908
+ input GetHistoricalScoresDto {
2909
+ minTimestampInclusive: DateTime!
2910
+ maxTimestampExclusive: DateTime!
2911
+ scoreTypes: [String!]!
2912
+ athleteIdOrEmail: String!
2913
+ }
2914
+
2915
+ input GetAthleteCampaignsDto {
2916
+ athleteId: String!
2917
+ }
2918
+
2919
+ input BrowseCampaignsDto {
2920
+ campaignId: String
2921
+ slug: String
2922
+ searchTerm: String
2923
+ sportId: String
2924
+ sportLevelId: String
2925
+ countryId: String
2926
+ sortBy: String
2927
+ sortOrder: String
2928
+ page: Int = 1
2929
+ limit: Int = 20
2930
+ includeFeatured: Boolean = true
2931
+ }
2932
+
2933
+ input ForceScoreRefreshDto {
2934
+ athleteIds: [String!]!
2935
+ rebuildHistorical: Boolean
2936
+ historicalDays: Int
2937
+ }
2938
+
2939
+ input CheckScoreRefreshCapabilityDto {
2940
+ athleteIds: [String!]!
2941
+ }
2942
+
2943
+ input UpdateOnboardingProgressDto {
2944
+ step: Int!
2945
+ complete: Boolean
2946
+ }
2947
+
2948
+ input SportQueryDto {
2949
+ """Page number (0-based)"""
2950
+ page: Int = 0
2951
+
2952
+ """Number of items per page"""
2953
+ limit: Int = 25
2954
+
2955
+ """Search query for sport name"""
2956
+ search: String
2957
+
2958
+ """Filter by result type (POSITION, TIME, etc.)"""
2959
+ resultType: String
2960
+
2961
+ """Filter by verified status"""
2962
+ verified: String
2963
+
2964
+ """Sort field"""
2965
+ sortField: String = "name"
2966
+
2967
+ """Sort order"""
2968
+ sortOrder: String = "asc"
2969
+ }
2970
+
2971
+ input QualificationDto {
2972
+ type: String!
2973
+ }
2974
+
2975
+ input AgeQualificationDto {
2976
+ type: String!
2977
+ value: Float!
2978
+ operator: String!
2979
+ }
2980
+
2981
+ input GenderQualificationDto {
2982
+ type: String!
2983
+ operator: String!
2984
+ values: [String!]!
2985
+ }
2986
+
2987
+ input NationalityQualificationDto {
2988
+ type: String!
2989
+ operator: String!
2990
+ countries: [String!]!
2991
+ }
2992
+
2993
+ input ScoreQualificationDto {
2994
+ type: String!
2995
+ scoreType: String!
2996
+ operator: String!
2997
+ value: Float!
2998
+ }
2999
+
3000
+ input LocationQualificationDto {
3001
+ type: String!
3002
+ operator: String!
3003
+ countries: [String!]!
3004
+ states: [String!]!
3005
+ cities: [String!]!
3006
+ }
3007
+
3008
+ input DistanceQualificationDto {
3009
+ type: String!
3010
+ maxDistance: Float!
3011
+ latitude: Float
3012
+ longitude: Float
3013
+ cityId: String
3014
+ }
3015
+
3016
+ input SportsQualificationDto {
3017
+ type: String!
3018
+ sports: [String!]!
3019
+ operator: String!
3020
+ }
3021
+
3022
+ input SportsLevelQualificationDto {
3023
+ type: String!
3024
+ operator: String!
3025
+ level: String!
3026
+ }
3027
+
3028
+ input RegisterUserDto {
3029
+ email: String!
3030
+ password: String!
3031
+ inviteCode: String
3032
+ }
3033
+
3034
+ input DeleteAthleteDto {
3035
+ userIdentifier: String!
3036
+ }
3037
+
3038
+ input resetPasswordDto {
3039
+ code: VerifyCodeDto!
3040
+ newPassword: String
3041
+ }
3042
+
3043
+ input UpdateUserSuspendedStatusDto {
3044
+ userId: String!
3045
+ suspended: Boolean!
3046
+ }
3047
+
3048
+ input UserQueryDto {
3049
+ """Page number (0-based)"""
3050
+ page: Int = 0
3051
+
3052
+ """Number of items per page"""
3053
+ limit: Int = 25
3054
+
3055
+ """Search query for user info"""
3056
+ search: String
3057
+
3058
+ """Filter by user type (athlete, member, sponsor)"""
3059
+ userType: String
3060
+
3061
+ """Filter by suspension status"""
3062
+ suspended: String
3063
+
3064
+ """Filter by sport (athlete-specific)"""
3065
+ sport: String
3066
+
3067
+ """Filter by sport level (athlete-specific)"""
3068
+ sportLevel: String
3069
+
3070
+ """Filter by gender (athlete-specific)"""
3071
+ gender: String
3072
+
3073
+ """Filter by location (athlete-specific)"""
3074
+ location: String
3075
+
3076
+ """Filter by nationality (athlete-specific)"""
3077
+ nationality: String
3078
+
3079
+ """Filter by minimum age (athlete-specific)"""
3080
+ ageMin: String
3081
+
3082
+ """Filter by maximum age (athlete-specific)"""
3083
+ ageMax: String
3084
+
3085
+ """Sort field"""
3086
+ sortField: String = "loginEmail"
3087
+
3088
+ """Sort order"""
3089
+ sortOrder: String = "asc"
3090
+ }
3091
+
3092
+ input DeleteVtxUserDto {
3093
+ userIdentifier: String!
3094
+ }
3095
+
3096
+ input GetReceiptDto {
3097
+ _id: String!
3098
+ }
3099
+
3100
+ input StripeQueryDto {
3101
+ operation: String!
3102
+ id: String!
3103
+ params: String
3104
+ }
3105
+
3106
+ input GetTransactionDetailsDto {
3107
+ vtxSessionId: String
3108
+ stripeSessionId: String
3109
+ }
3110
+
3111
+ input UpdateSportEventDto {
3112
+ _id: String!
3113
+ name: String
3114
+ cityId: String
3115
+ sportId: String
3116
+ startDate: DateTime
3117
+ endDate: DateTime
3118
+ website: String
3119
+ banner: AWSS3UploadedFileDto
3120
+ eventLevel: String
3121
+ }
3122
+
3123
+ input MergeSportsEventsDto {
3124
+ mergeTo: String!
3125
+ mergeName: String
3126
+ mergeStartDate: DateTime
3127
+ mergeEndDate: DateTime
3128
+ mergeWebsite: String
3129
+ mergeIds: [String!]!
3130
+ }
3131
+
3132
+ input EventQueryDto {
3133
+ """Page number (0-based)"""
3134
+ page: Int = 0
3135
+
3136
+ """Number of items per page"""
3137
+ limit: Int = 25
3138
+
3139
+ """Search query for event name or location"""
3140
+ search: String
3141
+
3142
+ """Filter by verified status"""
3143
+ verified: String
3144
+
3145
+ """Filter by sport name"""
3146
+ sport: String
3147
+
3148
+ """Filter by location (city, state, or country)"""
3149
+ location: String
3150
+
3151
+ """Filter by start date from (ISO string)"""
3152
+ dateFrom: String
3153
+
3154
+ """Filter by end date to (ISO string)"""
3155
+ dateTo: String
3156
+
3157
+ """Sort field"""
3158
+ sortField: String = "name"
3159
+
3160
+ """Sort order"""
3161
+ sortOrder: String = "asc"
3162
+ }
3163
+
3164
+ input BudgetItemDto {
3165
+ quantity: Float!
3166
+ concept: String!
3167
+ itemCost: Float!
3168
+ unit: String = ""
3169
+ }
3170
+
3171
+ input CreateBudgetItemDto {
3172
+ quantity: Float!
3173
+ concept: String!
3174
+ itemCost: Float!
3175
+ unit: String = ""
3176
+ budgetId: String!
3177
+ }
3178
+
3179
+ input CreateBudgetDto {
3180
+ initialFunds: Float = 0
3181
+ items: [BudgetItemDto!]
3182
+ }
3183
+
3184
+ input CreateCompetitionBudgetDto {
3185
+ initialFunds: Float = 0
3186
+ items: [BudgetItemDto!]
3187
+ athleteCompetitionId: String!
3188
+ }
3189
+
3190
+ input CreateVideoDto {
3191
+ source: String!
3192
+ url: String!
3193
+ sourceData: String! = "{}"
3194
+ }
3195
+
3196
+ input CreateFundingCampaignDto {
3197
+ budgetMode: String!
3198
+ title: String!
3199
+ motivation: String!
3200
+ website: String
3201
+ fundsRequired: Float!
3202
+ initialFundsObtained: Float! = 0
3203
+ cityId: String
3204
+ endingDate: DateTime!
3205
+ budget: CreateBudgetDto
3206
+ competitionBudgets: [CreateCompetitionBudgetDto!]
3207
+ competitionIds: [String!]
3208
+ video: CreateVideoDto
3209
+ coverImageId: String
3210
+ thankYouMessage: String
3211
+ thankYouMediaUrl: String
3212
+ autoSendThankYou: Boolean
3213
+ }
3214
+
3215
+ input CreateFundingCampaignForDto {
3216
+ budgetMode: String!
3217
+ title: String!
3218
+ motivation: String!
3219
+ website: String
3220
+ fundsRequired: Float!
3221
+ initialFundsObtained: Float! = 0
3222
+ cityId: String
3223
+ endingDate: DateTime!
3224
+ budget: CreateBudgetDto
3225
+ competitionBudgets: [CreateCompetitionBudgetDto!]
3226
+ competitionIds: [String!]
3227
+ video: CreateVideoDto
3228
+ coverImageId: String
3229
+ thankYouMessage: String
3230
+ thankYouMediaUrl: String
3231
+ autoSendThankYou: Boolean
3232
+ loginEmail: String!
3233
+ }
3234
+
3235
+ input UpdateFundingCampaignDto {
3236
+ budgetMode: String!
3237
+ title: String!
3238
+ motivation: String!
3239
+ website: String
3240
+ fundsRequired: Float!
3241
+ initialFundsObtained: Float! = 0
3242
+ cityId: String
3243
+ endingDate: DateTime!
3244
+ budget: CreateBudgetDto
3245
+ competitionBudgets: [CreateCompetitionBudgetDto!]
3246
+ competitionIds: [String!]
3247
+ video: CreateVideoDto
3248
+ coverImageId: String
3249
+ thankYouMessage: String
3250
+ thankYouMediaUrl: String
3251
+ autoSendThankYou: Boolean
3252
+ _id: String!
3253
+ }
3254
+
3255
+ input SetFundingStatusDto {
3256
+ fundingCampaignId: String!
3257
+ newStatus: String!
3258
+ }
3259
+
3260
+ input BudgetDto {
3261
+ items: [BudgetItemDto!]!
3262
+ fundingMode: String
3263
+ }
3264
+
3265
+ input AddCompetitionBudgetDto {
3266
+ competitionId: String!
3267
+ budget: BudgetDto!
3268
+ }
3269
+
3270
+ input EditCompetitionBudgetDto {
3271
+ competitionId: String!
3272
+ budget: BudgetDto!
3273
+ }
3274
+
3275
+ input EditCampaignBudgetDto {
3276
+ campaignId: String!
3277
+ competitionId: String
3278
+ fundsRequired: Float
3279
+ initialFundsObtained: Float
3280
+ budget: BudgetDto
3281
+ }
3282
+
3283
+ input DonationFiltersInput {
3284
+ """Filter by date from (ISO date YYYY-MM-DD)"""
3285
+ dateFrom: String
3286
+
3287
+ """Filter by date to (ISO date YYYY-MM-DD)"""
3288
+ dateTo: String
3289
+
3290
+ """Minimum donation amount"""
3291
+ amountMin: Float
3292
+
3293
+ """Maximum donation amount"""
3294
+ amountMax: Float
3295
+
3296
+ """Filter by campaign ID"""
3297
+ campaignId: String
3298
+ }
3299
+
3300
+ input DonationQueryDto {
3301
+ """Page number (0-based)"""
3302
+ page: Int = 0
3303
+
3304
+ """Number of items per page"""
3305
+ limit: Int = 20
3306
+
3307
+ """Search query for donorName, donorEmail"""
3308
+ search: String
3309
+
3310
+ """Additional filters"""
3311
+ filters: DonationFiltersInput
3312
+
3313
+ """Sort field"""
3314
+ sortField: String = "createdDate"
3315
+
3316
+ """Sort order (asc or desc)"""
3317
+ sortOrder: String = "desc"
3318
+ }
3319
+
3320
+ input CreateMembershipOrganizationDto {
3321
+ shortName: String!
3322
+ acronym: String
3323
+ fullName: String!
3324
+ website: String
3325
+ logo: AWSS3UploadedFileDto
3326
+ countryId: String
3327
+ sportId: String
3328
+ }
3329
+
3330
+ input CreateAthleteMembershipDto {
3331
+ organizationId: String!
3332
+ membershipNumber: String
3333
+ membershipType: String
3334
+ issueDate: DateTime
3335
+ expirationDate: DateTime
3336
+ }
3337
+
3338
+ input CreateAthleteIntegrationDto {
3339
+ athleteId: String!
3340
+ accessToken: String!
3341
+ refreshToken: String!
3342
+ expiresIn: Float!
3343
+ refreshExpiresIn: Float
3344
+ }
3345
+
3346
+ input GetFundingCheckoutSessionDataDto {
3347
+ _id: String!
3348
+ }
3349
+
3350
+ input SocialState {
3351
+ systemId: String!
3352
+ loginEmail: String!
3353
+ client: String
3354
+ }
3355
+
3356
+ input RegisterMemberDto {
3357
+ email: String!
3358
+ firstName: String!
3359
+ lastName: String!
3360
+ screenName: String
3361
+ profilePicture: AWSS3UploadedFileDto
3362
+ }
3363
+
3364
+ input TransactionQueryDto {
3365
+ """Page number (0-based)"""
3366
+ page: Int = 0
3367
+
3368
+ """Number of items per page"""
3369
+ limit: Int = 25
3370
+
3371
+ """Search query for payer info, session ID, or checkout ID"""
3372
+ search: String
3373
+
3374
+ """Filter by transaction type"""
3375
+ type: String
3376
+
3377
+ """Filter by completion status"""
3378
+ completed: String
3379
+
3380
+ """Filter by athlete stripe account ID"""
3381
+ athleteStripeAccount: String
3382
+
3383
+ """Filter by athlete ID"""
3384
+ athleteId: String
3385
+
3386
+ """Filter by date from (ISO string)"""
3387
+ dateFrom: String
3388
+
3389
+ """Filter by date to (ISO string)"""
3390
+ dateTo: String
3391
+
3392
+ """Sort field"""
3393
+ sortField: String = "createdDate"
3394
+
3395
+ """Sort order"""
3396
+ sortOrder: String = "desc"
3397
+ }
3398
+
3399
+ input OffsetPaginationDto {
3400
+ pageNumber: Float! = 1
3401
+ pageSize: Float! = 25
3402
+ sortCriteria: SortCriteriaDto
3403
+ }
3404
+
3405
+ input CreateOfferDto {
3406
+ name: String
3407
+ label: String!
3408
+ decription: String
3409
+ offerImage: AWSS3UploadedFileDto
3410
+ type: String!
3411
+ status: String! = "INACTIVE"
3412
+ discountType: String! = "OTHER"
3413
+ discountTypeData: String = "{}"
3414
+ conditions: [String!] = []
3415
+ brandId: String!
3416
+ sponsorId: String!
3417
+ criteria: AthleteCriteriaDto
3418
+ dateStart: DateTime
3419
+ dateEnd: DateTime
3420
+ totalCodes: Int
3421
+ disclaimer: String
3422
+ availableCountryIds: [String!]
3423
+ genericCode: String
3424
+ featured: Boolean = false
3425
+ }
3426
+
3427
+ input AthleteCriteriaDto {
3428
+ _id: String!
3429
+ label: String
3430
+ qualificationsBag: QualificationsBagDto
3431
+ }
3432
+
3433
+ input QualificationsBagDto {
3434
+ ageQualifications: [AgeQualificationDto!]
3435
+ genderQualifications: [GenderQualificationDto!]
3436
+ scoreQualifications: [ScoreQualificationDto!]
3437
+ locationQualifications: [LocationQualificationDto!]
3438
+ nationalityQualifications: [NationalityQualificationDto!]
3439
+ distanceQualifications: [DistanceQualificationDto!]
3440
+ sportsQualifications: [SportsQualificationDto!]
3441
+ levelQualifications: [SportsLevelQualificationDto!]
3442
+ }
3443
+
3444
+ input OfferQueryDto {
3445
+ """Page number (0-based)"""
3446
+ page: Int = 0
3447
+
3448
+ """Number of items per page"""
3449
+ limit: Int = 25
3450
+
3451
+ """Search query for offer name or description"""
3452
+ search: String
3453
+
3454
+ """Filter by active status"""
3455
+ active: String
3456
+
3457
+ """Filter by offer type"""
3458
+ offerType: String
3459
+
3460
+ """Filter by featured status"""
3461
+ featured: String
3462
+
3463
+ """Filter by brand ID"""
3464
+ brandId: String
3465
+
3466
+ """Sort field"""
3467
+ sortField: String = "name"
3468
+
3469
+ """Sort order"""
3470
+ sortOrder: String = "asc"
3471
+
3472
+ """Filter to only show offers the athlete is eligible for"""
3473
+ filterEligibleOnly: Boolean = false
3474
+
3475
+ """Athlete ID to check eligibility against"""
3476
+ athleteId: String
3477
+ }
3478
+
3479
+ input OfferClaimQueryDto {
3480
+ status: OfferClaimStatus = ALL
3481
+ }
3482
+
3483
+ input LeaderboardQueryDto {
3484
+ """
3485
+ Score type: VTX_SCORE, SOCIAL_SCORE, TRANING_SCORE, or COMPETITION_SCORE
3486
+ """
3487
+ scoreType: String
3488
+
3489
+ """Filter by sport ID"""
3490
+ sportId: String
3491
+
3492
+ """Filter by sport level ID"""
3493
+ sportLevelId: String
3494
+
3495
+ """Filter by country code (ISO 2-letter)"""
3496
+ countryCode: String
3497
+
3498
+ """Page number (1-based)"""
3499
+ page: Int = 1
3500
+
3501
+ """Number of entries per page (max 100)"""
3502
+ limit: Int = 20
3503
+ }
3504
+
3505
+ input UserRankQueryDto {
3506
+ """Athlete ID"""
3507
+ athleteId: String!
3508
+
3509
+ """
3510
+ Score type: VTX_SCORE, SOCIAL_SCORE, TRANING_SCORE, or COMPETITION_SCORE
3511
+ """
3512
+ scoreType: String
3513
+
3514
+ """Filter by sport ID"""
3515
+ sportId: String
3516
+
3517
+ """Filter by sport level ID"""
3518
+ sportLevelId: String
3519
+
3520
+ """Filter by country code (ISO2)"""
3521
+ countryCode: String
3522
+ }
3523
+
3524
+ input ScoreHistoryQueryDto {
3525
+ athleteId: String!
3526
+ timeRange: TimeRange!
3527
+ }
3528
+
3529
+ """Time range for historical data queries"""
3530
+ enum TimeRange {
3531
+ SEVEN_DAYS
3532
+ THIRTY_DAYS
3533
+ NINETY_DAYS
3534
+ ONE_YEAR
3535
+ ALL_TIME
3536
+ }
3537
+
3538
+ input RankHistoryQueryDto {
3539
+ athleteId: String!
3540
+ timeRange: TimeRange!
3541
+ sportId: String
3542
+ countryCode: String
3543
+ }
3544
+
3545
+ input RankContextQueryDto {
3546
+ athleteId: String!
3547
+ sportId: String
3548
+ sportLevelId: String
3549
+ countryCode: String
3550
+ }
3551
+
3552
+ input MetricRangeInput {
3553
+ """Name of the metric to filter (e.g., "distance", "elevation_gain")"""
3554
+ metricName: String!
3555
+
3556
+ """Minimum value for the metric (inclusive)"""
3557
+ min: Float
3558
+
3559
+ """Maximum value for the metric (inclusive)"""
3560
+ max: Float
3561
+ }
3562
+
3563
+ input ActivityFiltersInput {
3564
+ """Filter to a specific date (ISO format YYYY-MM-DD)"""
3565
+ dateFilter: String
3566
+
3567
+ """Filter by date range start (ISO format YYYY-MM-DD)"""
3568
+ dateFrom: String
3569
+
3570
+ """Filter by date range end (ISO format YYYY-MM-DD)"""
3571
+ dateTo: String
3572
+
3573
+ """
3574
+ Filter by activity types (e.g., ["Run", "Ride", "Swim"]). Schema placeholder - not yet implemented.
3575
+ """
3576
+ activityTypes: [String!]
3577
+
3578
+ """Filter by metric ranges. Schema placeholder - not yet implemented."""
3579
+ metricRanges: [MetricRangeInput!]
3580
+ }
3581
+
3582
+ input ActivitiesQueryDto {
3583
+ athleteId: String!
3584
+ category: ActivityCategory!
3585
+ timeRange: TimeRange!
3586
+ page: Int = 1
3587
+ limit: Int = 20
3588
+
3589
+ """Optional filters for activities"""
3590
+ filters: ActivityFiltersInput
3591
+ }
3592
+
3593
+ input ActivityDetailQueryDto {
3594
+ athleteId: String!
3595
+ activityId: String!
3596
+
3597
+ """Category: training or social"""
3598
+ category: String!
3599
+ }
3600
+
3601
+ input ComponentSummaryQueryDto {
3602
+ athleteId: String!
3603
+
3604
+ """Component: training or social"""
3605
+ component: String!
3606
+ }
3607
+
3608
+ input ActivityDatesQueryDto {
3609
+ athleteId: String!
3610
+ }
3611
+
3612
+ input DateRangeInput {
3613
+ start: DateTime!
3614
+ end: DateTime!
3615
+ }
3616
+
3617
+ input PostComparisonInput {
3618
+ comparisonWindowDays: Int = 90
3619
+ sortBy: PostSortOption = RECENT
3620
+ contentType: ContentType
3621
+ limit: Int = 10
3622
+ offset: Int = 0
3623
+ }
3624
+
3625
+ input NotificationQueryDto {
3626
+ """Maximum number of notifications to return"""
3627
+ limit: Int = 20
3628
+
3629
+ """Number of notifications to skip"""
3630
+ offset: Int = 0
3631
+
3632
+ """Whether to include read notifications"""
3633
+ includeRead: Boolean = true
3634
+
3635
+ """Whether to include dismissed notifications"""
3636
+ includeDismissed: Boolean = false
3637
+
3638
+ """Filter by notification types"""
3639
+ types: [String!]
3640
+ }
3641
+
3642
+ input MarkNotificationReadDto {
3643
+ """The notification ID to mark as read"""
3644
+ notificationId: String!
3645
+ }
3646
+
3647
+ input DismissNotificationDto {
3648
+ """The notification ID to dismiss"""
3649
+ notificationId: String!
3650
+ }
3651
+
3652
+ input UpdateNotificationPreferenceDto {
3653
+ """Whether to enable email notifications"""
3654
+ emailEnabled: Boolean
3655
+
3656
+ """Whether to enable in-app notifications"""
3657
+ inAppEnabled: Boolean
3658
+
3659
+ """Whether to enable push notifications"""
3660
+ pushEnabled: Boolean
3661
+
3662
+ """Array of notification type keys to mute"""
3663
+ mutedTypes: [String!]
3664
+ }
3665
+
3666
+ input RegisterDeviceTokenDto {
3667
+ token: String!
3668
+ platform: String!
3669
+ deviceName: String
3670
+ }
3671
+
3672
+ input UnregisterDeviceTokenDto {
3673
+ token: String!
3674
+ }
3675
+
3676
+ input FollowAthleteInput {
3677
+ """The athlete ID to follow"""
3678
+ athleteId: String!
3679
+ }
3680
+
3681
+ input UnfollowAthleteInput {
3682
+ """The athlete ID to unfollow"""
3683
+ athleteId: String!
3684
+ }
3685
+
3686
+ input IsFollowingAthleteInput {
3687
+ """The athlete ID to check"""
3688
+ athleteId: String!
3689
+ }
3690
+
3691
+ input FollowedAthletesQueryInput {
3692
+ """Maximum number of athletes to return (default: 20, max: 100)"""
3693
+ limit: Int
3694
+
3695
+ """Offset for pagination"""
3696
+ offset: Int
3697
+ }
3698
+
3699
+ input SendChatMessageDto {
3700
+ """Thread ID to send the message in"""
3701
+ threadId: String!
3702
+
3703
+ """Chat message content (1-2000 characters)"""
3704
+ message: String!
3705
+ }
3706
+
3707
+ input UpdateAiCoachConfigDto {
3708
+ """Enable or disable AI Coach"""
3709
+ enabled: Boolean
3710
+
3711
+ """Enable or disable nudge notifications"""
3712
+ nudgesEnabled: Boolean
3713
+
3714
+ """Preferred focus: BALANCED, TRAINING, SOCIAL, or COMPETITION"""
3715
+ preferredFocus: String
3716
+ }
3717
+
3718
+ input NudgeQueryDto {
3719
+ """If true, return only unread nudges"""
3720
+ unreadOnly: Boolean = false
3721
+ }
3722
+
3723
+ input CreateTeamInput {
3724
+ name: String!
3725
+ description: String
3726
+ sportIds: [String!]!
3727
+ joinPolicy: String = "invite-only"
3728
+ maxRosterSize: Int
3729
+ visibility: String = "public"
3730
+ clubId: String
3731
+ }
3732
+
3733
+ input UpdateTeamInput {
3734
+ teamId: String!
3735
+ name: String
3736
+ description: String
3737
+ joinPolicy: String
3738
+ maxRosterSize: Int
3739
+ visibility: String
3740
+ }
3741
+
3742
+ input JoinTeamInput {
3743
+ teamId: String!
3744
+ sportId: String!
3745
+ message: String
3746
+ }
3747
+
3748
+ input ManageTeamMemberInput {
3749
+ teamId: String!
3750
+ athleteId: String!
3751
+ action: String!
3752
+ role: String
3753
+ }
3754
+
3755
+ input CreateClubInput {
3756
+ name: String!
3757
+ description: String
3758
+ sportIds: [String!]!
3759
+ membershipType: String = "open"
3760
+ feeStructure: JSON
3761
+ visibility: String = "public"
3762
+ location: String
3763
+ website: String
3764
+ }
3765
+
3766
+ input UpdateClubInput {
3767
+ clubId: String!
3768
+ name: String
3769
+ description: String
3770
+ membershipType: String
3771
+ feeStructure: JSON
3772
+ visibility: String
3773
+ location: String
3774
+ website: String
3775
+ }
3776
+
3777
+ input JoinClubInput {
3778
+ clubId: String!
3779
+ message: String
3780
+ }
3781
+
3782
+ input ManageClubMemberInput {
3783
+ clubId: String!
3784
+ athleteId: String!
3785
+ action: String!
3786
+ role: String
3787
+ }
3788
+
3789
+ """Mode of donation for the funding checkout session"""
3790
+ enum DonationMode {
3791
+ PUBLIC
3792
+ PRIVATE
3793
+ ANONYMOUS
3794
+ }
3795
+
3796
+ enum OfferClaimStatus {
3797
+ ACTIVE
3798
+ EXPIRED
3799
+ ALL
3800
+ }
3801
+
3802
+ """Options for sorting posts"""
3803
+ enum PostSortOption {
3804
+ RECENT
3805
+ TOP
3806
+ UNDERPERFORMING
3807
+ }
3808
+
3809
+ type Query {
3810
+ findTenantById(_id: String!): Tenant!
3811
+ findTenantByEmail(email: String!, domainId: String!): Tenant!
3812
+ getTenants: [Tenant!]!
3813
+ isTenantUriAvailable(tenant_uri: String!): UriAvailableType!
3814
+ findUserById(_id: String!): User!
3815
+ findUserByEmail(email: String!): User!
3816
+ validateUserCredentials(username: String!, password: String!): User!
3817
+ getUploadUrl(input: AWSS3GetUploadDto!): AWSS3UploadUrl!
3818
+ industries: [Industry!]!
3819
+ findIndustryById(industryId: String!): Industry!
3820
+ brands: [Brand!]!
3821
+ getBrandsPaginated(query: BrandQueryDto): PaginatedBrands!
3822
+ getBrandByName(name: String!, translations: Boolean!): Brand!
3823
+ getBrandTranslation(brandId: String!, language: String!): BrandTranslation!
3824
+ existsValidSponsorForEmail(loginEmail: String!): Sponsor!
3825
+ sponsors: [Sponsor!]!
3826
+ getSponsorsPaginated(query: SponsorQueryDto): PaginatedSponsors!
3827
+ findSponsorAthleteInvitation(input: FindSponsorAthleteInvitationDto!): SponsorAthleteInvitation!
3828
+ verifyAthleteCompetitionLinkedForDelete(input: existValueDto!): CompetitionDeleteVerificationResponse!
3829
+ getAthletes: [Athlete!]!
3830
+ queryAthleteFundingCampaigns(input: AthleteQueryDto!): AthleteQueryResponse!
3831
+ searchAthletes(searchString: String!): [Athlete!]!
3832
+ findAthleteById(athleteId: String!): Athlete!
3833
+ findAthleteForUser(loginEmail: String!): Athlete!
3834
+ getRecommendedAthletes(loginEmail: String!): [Athlete!]!
3835
+ getSponsorAthletesForTenant: [Athlete!]!
3836
+ getAthleteCompetitions(input: GetAthleteCompetitionsDto!): [AthleteCompetition!]!
3837
+ getAthleteMemberships(athleteId: String!): [AthleteMembership!]!
3838
+ findAthletebyIdpublic(athleteId: String!): Athlete!
3839
+ getAthleteAlbums: [Album!]!
3840
+ getAndSetAlbumById(input: String!): Album!
3841
+ getAthleteAlbumId(input: String!): Album!
3842
+ queryAthleteWithFilter(input: AthleteQueryDto!): AthleteQueryResponse!
3843
+ getPublicAthleteAlbums(athleteId: String!): [Album!]!
3844
+ screenNameAvailability(input: existValueDto!): ExistValueResponse!
3845
+ checkScoreRefreshCapabilities(input: CheckScoreRefreshCapabilityDto!): CheckScoreRefreshCapabilityResponse!
3846
+ getAthleteHistoricalScoresPeriod(input: GetHistoricalScoresDto!): HistoricalScoresPeriod!
3847
+ getAthleteHistoricalScores(input: GetHistoricalScoresDto!): [HistoricalScore!]!
3848
+ getMyHistoricalScoresPeriod(input: GetMyHistoricalScoresDto!): HistoricalScoresPeriod!
3849
+ getMyHistoricalScores(input: GetMyHistoricalScoresDto!): [HistoricalScore!]!
3850
+ getAthleteCampaigns(input: GetAthleteCampaignsDto!): [FundRaisingCampaign!]!
3851
+ browseCampaigns(input: BrowseCampaignsDto!): BrowseCampaignsResult!
3852
+ getOnboardingProgress: OnboardingProgressResponse!
3853
+ getPublicAthleteIntegrationStatus(athleteId: String!): PublicIntegrationStatus!
3854
+ getSports: [Sport!]!
3855
+ getSportsPaginated(query: SportQueryDto): PaginatedSports!
3856
+ findSportById(sportId: String!): Sport!
3857
+ getSportLevels: [SportLevel!]!
3858
+ getPublicSponsorships: [Sponsorship!]!
3859
+ getTenantSponsorships: [Sponsorship!]!
3860
+ getCountries: [Country!]!
3861
+ getCountryStates(countryId: String!): [State!]!
3862
+ getStates: [State!]!
3863
+ getStateCities(stateId: String!): [City!]!
3864
+ findCitiesStartingWith(text: String!): [City!]!
3865
+ findCityById(cityId: String!): City!
3866
+ findVtxUser(input: FindVtxUserDto!): User!
3867
+ validateUserCredentialsVtx(username: String!, password: String!): User!
3868
+ getUserImagesFromEmail(loginEmail: String!): UserImages!
3869
+ getResetVerificationCode(input: String!): VerificationCode!
3870
+ verifyCode(input: VerifyCodeDto!): CodeVerificationResponse!
3871
+ isUserSuspended(loginEmail: String!): Boolean!
3872
+ getAllUsers: [AdminUserView!]!
3873
+ getUsersPaginated(query: UserQueryDto): PaginatedUsers!
3874
+ getStravaLoginUrl: String!
3875
+ getSportsEvents(input: GetSportEventsDto!): [SportsEvent!]!
3876
+ getSportsEventsPaginated(query: EventQueryDto): PaginatedEvents!
3877
+ getBudgetsByAthlete: BudgetData!
3878
+ getDonationsByAthlete: [Receipt!]!
3879
+ getDonationsToAthlete(athleteId: String!): [Donation!]!
3880
+ getDonationsToMe: [Donation!]!
3881
+ getBudgetConcepts: [BudgetConcept!]!
3882
+ getBudgetItemUnits: [BudgetItemUnit!]!
3883
+ getDonationDatesForCalendar(campaignId: String): DonationDates!
3884
+ getDonationsPaginated(query: DonationQueryDto): PaginatedDonations!
3885
+ campaignThankYous(campaignId: String!): [DonationThankYou!]!
3886
+ donationThankYou(donationId: String!): DonationThankYou
3887
+ getMembershipOrganizations: [MembershipOrganizationReference!]!
3888
+ getAthleteStravaIntegration: AthleteIntegrationReference!
3889
+ getAthleteInstagramIntegration: AthleteIntegrationReference!
3890
+ getAthleteIntegrations: AthleteIntegrationReference!
3891
+ stripeQuery(input: StripeQueryDto!): StripeObject!
3892
+ getStripeBalance: StripeBalance!
3893
+ getDatabaseTextFile(input: GetDatabaseFileDto!): TextDatabaseFile!
3894
+ getS3UploadUrl(input: AWSS3GetUploadDto!): AWSS3UploadUrl!
3895
+ getReceipt(input: GetReceiptDto!): Receipt!
3896
+ getReceiptUrl(input: GetReceiptDto!): ReceiptUrl!
3897
+ getTransactionDetails(input: GetTransactionDetailsDto!): TransactionDetails!
3898
+ findMemberForUser(loginEmail: String!): Member!
3899
+ getDonationsByMember: [Donation!]!
3900
+ getDonationsByUser(email: String!): [Donation!]!
3901
+ getAllTransactions: [AdminTransactionView!]!
3902
+ getTransactionsPaginated(query: TransactionQueryDto): PaginatedTransactions!
3903
+ offers: [Offer!]!
3904
+ getOffersPaginated(query: OfferQueryDto): PaginatedOffers!
3905
+ offersForAthlete(athleteId: String): [Offer!]!
3906
+ offer(id: String!): Offer!
3907
+ myOfferClaims(athleteId: String!, query: OfferClaimQueryDto): [OfferClaim!]!
3908
+ offerAvailability(offerId: String!, athleteId: String!): OfferAvailability!
3909
+ offersWithEligibility(query: OfferQueryDto): PaginatedOffersWithEligibility!
3910
+ getLeaderboard(input: LeaderboardQueryDto): LeaderboardResponse!
3911
+ getUserRank(input: UserRankQueryDto!): UserRank!
3912
+ athleteDashboard(athleteId: String!): DashboardSummary!
3913
+ athleteScoreHistory(input: ScoreHistoryQueryDto!): [ScoreHistoryEntry!]!
3914
+ athleteRankHistory(input: RankHistoryQueryDto!): [RankHistoryEntry!]!
3915
+ athleteRankContext(input: RankContextQueryDto!): RankContext!
3916
+ athleteActivities(input: ActivitiesQueryDto!): ActivitiesResponse!
3917
+ athleteActivityDetail(input: ActivityDetailQueryDto!): ActivityDetail!
3918
+ athleteComponentSummary(input: ComponentSummaryQueryDto!): ComponentSummary!
3919
+ athleteActivityDates(input: ActivityDatesQueryDto!): ActivityDatesResponse!
3920
+ socialAggregates(athleteId: ID!, platform: Platform!, range: DateRangeInput!, periodType: PeriodType): [SocialAggregateType!]!
3921
+ postsWithComparison(athleteId: ID!, platform: Platform!, options: PostComparisonInput): PostComparisonResultType!
3922
+
3923
+ """Get notifications for the current user"""
3924
+ myNotifications(input: NotificationQueryDto): NotificationListResponse!
3925
+
3926
+ """Get count of unread notifications"""
3927
+ notificationUnreadCount: UnreadCountResponse!
3928
+
3929
+ """Get notification preferences for the current user"""
3930
+ myNotificationPreferences: NotificationPreference!
3931
+
3932
+ """Get athletes followed by the current member"""
3933
+ myFollowedAthletes(input: FollowedAthletesQueryInput): FollowedAthletesListResponse!
3934
+
3935
+ """Check if the current member is following an athlete"""
3936
+ isFollowingAthlete(input: IsFollowingAthleteInput!): IsFollowingResponse!
3937
+ getEmailCampaigns(status: String, search: String, page: Int = 1, limit: Int = 20): EmailCampaignPage!
3938
+ getEmailCampaign(id: String!): EmailCampaign!
3939
+ getAudiencePreview(filters: AudienceFilterDto!): AudiencePreview!
3940
+ getSendGridTemplates: [SendGridTemplate!]!
3941
+ getSendGridTemplatePreview(templateId: String!): String
3942
+ getEmailSegments: [EmailSegment!]!
3943
+
3944
+ """Get the current week AI Coach thread with messages"""
3945
+ getAiCoachThread: AiCoachThread
3946
+
3947
+ """Get archived AI Coach thread history for the athlete"""
3948
+ getAiCoachThreadHistory(limit: Int = 10): [AiCoachThread!]!
3949
+
3950
+ """Get messages for a specific AI Coach thread"""
3951
+ getAiCoachThreadMessages(threadId: String!): [AiCoachMessage!]!
3952
+
3953
+ """Get AI Coach configuration for the current athlete"""
3954
+ getAiCoachConfig: AiCoachConfig!
3955
+
3956
+ """Get AI Coach nudges for the current athlete"""
3957
+ getAiCoachNudges(input: NudgeQueryDto): AiCoachNudgeListResponse!
3958
+
3959
+ """Get count of unread AI Coach nudges"""
3960
+ getAiCoachUnreadNudgeCount: AiCoachUnreadNudgeCountResponse!
3961
+
3962
+ """Find ALL teams for admin (no approval/visibility filter)"""
3963
+ findAllTeams: [Team!]!
3964
+
3965
+ """Get team Stripe Connect account status"""
3966
+ getTeamStripeAccountStatus(teamId: String!): StripeAccountStatus
3967
+
3968
+ """Get teams where current athlete is a member"""
3969
+ getMyTeams: [Team!]!
3970
+
3971
+ """Find a team by ID"""
3972
+ findTeamById(teamId: String!): Team!
3973
+
3974
+ """Find teams with optional filters"""
3975
+ findTeams(sportId: String, clubId: String): [Team!]!
3976
+
3977
+ """Get active roster for a team"""
3978
+ getTeamRoster(teamId: String!): [AthleteTeam!]!
3979
+
3980
+ """Get team analytics (VTX score, athlete count, history, top performers)"""
3981
+ getTeamAnalytics(teamId: String!): TeamAnalytics!
3982
+
3983
+ """Get internal team leaderboard (athletes ranked within team)"""
3984
+ getTeamLeaderboard(teamId: String!): [TeamLeaderboardEntry!]!
3985
+
3986
+ """Get full team dashboard (owner/coach only)"""
3987
+ getTeamDashboard(teamId: String!): TeamDashboard!
3988
+
3989
+ """Find ALL clubs for admin (no approval/visibility filter)"""
3990
+ findAllClubs: [Club!]!
3991
+
3992
+ """Get club Stripe Connect account status"""
3993
+ getClubStripeAccountStatus(clubId: String!): StripeAccountStatus
3994
+
3995
+ """Get clubs where current athlete is a member"""
3996
+ getMyClubs: [Club!]!
3997
+
3998
+ """Find a club by ID"""
3999
+ findClubById(clubId: String!): Club!
4000
+
4001
+ """Find clubs with optional filters"""
4002
+ findClubs(sportId: String): [Club!]!
4003
+
4004
+ """Get active members of a club"""
4005
+ getClubMembers(clubId: String!): [AthleteClub!]!
4006
+ }
4007
+
4008
+ input AWSS3GetUploadDto {
4009
+ useType: String!
4010
+ name: String
4011
+ }
4012
+
4013
+ input FindSponsorAthleteInvitationDto {
4014
+ code: String!
4015
+ type: String
4016
+ }
4017
+
4018
+ input GetAthleteCompetitionsDto {
4019
+ athleteId: String!
4020
+ fromInclusive: DateTime
4021
+ toExclusive: DateTime
4022
+ }
4023
+
4024
+ input FindVtxUserDto {
4025
+ loginEmail: String!
4026
+ }
4027
+
4028
+ input GetSportEventsDto {
4029
+ matchString: String
4030
+ }
4031
+
4032
+ input AudienceFilterDto {
4033
+ """Filter by user type (athlete, member, sponsor)"""
4034
+ userType: String
4035
+
4036
+ """Filter by sport name (matches athlete main sport)"""
4037
+ sport: String
4038
+
4039
+ """Filter by country name"""
4040
+ country: String
4041
+
4042
+ """Onboarding status (complete, incomplete)"""
4043
+ onboardingStatus: String
4044
+
4045
+ """Campaign status filter (active, none, ending_soon, expired, funded)"""
4046
+ campaignStatus: String
4047
+
4048
+ """Wallet status filter (created, not_created)"""
4049
+ walletStatus: String
4050
+
4051
+ """Filter by Strava connection status"""
4052
+ hasStrava: Boolean
4053
+
4054
+ """Filter by Instagram connection status"""
4055
+ hasInstagram: Boolean
4056
+
4057
+ """Minimum VTX score"""
4058
+ vtxScoreMin: Float
4059
+
4060
+ """Maximum VTX score"""
4061
+ vtxScoreMax: Float
4062
+
4063
+ """Donor status (never_donated, has_donated)"""
4064
+ donorStatus: String
4065
+ }
4066
+
4067
+ type Mutation {
4068
+ registerNewDomainTenant(tenant: CreateTenantInput!): Tenant!
4069
+ registerNewDomainTenantWithLogin(tenant: CreateTenantInput!): TenantWithUserLogin!
4070
+ createUserAndLogin(user: CreateActiveUserInput!): UserWithToken!
4071
+ loginUserFromEmail(email: String!, loginMethod: String!): UserToken!
4072
+ loginUserFromCredentials(username: String!, password: String!): UserWithToken!
4073
+ registerUserToDomainFromEmail(input: RegisterUserToDomainFromEmailInput!): User!
4074
+ refreshToken(dto: RefreshTokenInput!): UserToken!
4075
+ deleteUploadedUseTypeFile(input: AWSS3DeleteUseTypeFileDto!): AWSS3CallResult!
4076
+ deleteUploadedBucketFile(input: AWSS3DeleteBucketFileDto!): AWSS3CallResult!
4077
+ deleteUploadedTypeKeyFile(input: AWSS3DeleteUseTypeKeyDto!): AWSS3CallResult!
4078
+ registerS3UploadedFile(input: AWSS3UploadedFileDto!): AWSS3File!
4079
+ createIndustry(input: CreateIndustryDto!): Industry!
4080
+ createBrand(input: CreateBrandDto!): Brand!
4081
+ updateBrand(id: String!, input: CreateBrandDto!): Brand!
4082
+ deleteBrand(id: String!): Boolean!
4083
+ linkBrandToSponsor(brandId: String!, sponsorId: String!): Brand!
4084
+ unlinkBrandFromSponsor(brandId: String!, sponsorId: String!): Brand!
4085
+ registerSponsor(input: RegisterSponsorInput!): Sponsor!
4086
+ createSponsor(input: CreateSponsorDto!): Sponsor!
4087
+ sendAthleteInvitations(input: InviteAthletesDto!): [SponsorAthleteInvitation!]!
4088
+ updateSponsor(id: String!, input: UpdateSponsorDto!): Sponsor!
4089
+ deleteSponsor(id: String!): Boolean!
4090
+ forceDeleteAthleteCompetition(input: DeleteSingleValueDto!): DeleteSingleValueResponse!
4091
+ registerAthlete(input: RegisterAthleteDto!): Athlete!
4092
+ editProfileValue(input: EditValueDto!): EditValueResponse!
4093
+ editPicture(input: EditPictureDto!): EditPictureResponse!
4094
+ AddAlbumPictures(input: UploadAlbumsPicturesDto!): AddValuesResponse!
4095
+ addAthleteCompetition(input: CreateAthleteCompetitionDto!): AthleteCompetition!
4096
+ deleteAthleteCompetition(input: DeleteSingleValueDto!): DeleteSingleValueResponse!
4097
+ createAthleteAlbum(input: UploadAlbumsPicturesDto!): Album!
4098
+ reorderAlbumIndex(input: EditDisplayIndexDto!): [Album!]!
4099
+ editAlbum(input: UploadAlbumsPicturesDto!): Album!
4100
+ deleteAthleteAlbum(input: DeleteSingleValueDto!): DeleteSingleValueResponse!
4101
+ deleteAthletePhotos(input: DeleteValuesDto!): DeleteValuesResponse!
4102
+ saveAthleteCompetitionResult(input: SetCompetitionResultDto!): AthleteCompetitionResult!
4103
+ updateAthleteScores: Athlete!
4104
+ updateAthleteCompetitionScores: Athlete!
4105
+ forceRefreshAthleteScores(input: ForceScoreRefreshDto!): ForceScoreRefreshResponse!
4106
+ setCurrentCampaign(input: SetCurrentCampaignDto!): FundRaisingCampaign!
4107
+ deleteOnboardingAthlete: DeleteOnboardingAthleteResponse!
4108
+ updateOnboardingProgress(input: UpdateOnboardingProgressDto!): OnboardingProgressResponse!
4109
+ createSport(input: CreateSportDto!): Sport!
4110
+ updateSport(input: UpdateSportDto!): Sport!
4111
+ createSportLevel(input: CreateSportLevelDto!): SportLevel!
4112
+ createSponsorship(input: CreateSponsorshipDto!): Sponsorship!
4113
+ createCountry(input: CreateCountryDto!): Country!
4114
+ createState(input: CreateStateDto!): State!
4115
+ createCity(input: CreateCityDto!): City!
4116
+ preRegisterAthleteUser(input: RegisterUserDto!): VerificationCode!
4117
+ confirmAthleteUserRegistrationAndLogin(input: VerifyCodeDto!): UserWithToken!
4118
+ confirmAthleteUserRegistration(input: VerifyCodeDto!): User!
4119
+ registerAthleteUser(input: RegisterUserDto!): User!
4120
+ registerUser(input: RegisterUserDto!): User!
4121
+ registerSponsorUser(input: RegisterUserDto!): User!
4122
+ loginUserFromCredentialsVtx(username: String!, password: String!): UserWithToken!
4123
+ createResetPasswordCode(input: String!): EditValueResponse!
4124
+ resetUserPassword(input: resetPasswordDto!): EditValueResponse!
4125
+ validateToken(input: String!): ValidatedToken!
4126
+ updateUserSuspendedStatus(input: UpdateUserSuspendedStatusDto!): EditValueResponse!
4127
+ deleteMyAccount: DeleteVtxUserResponse!
4128
+ deleteVtxUser(input: DeleteVtxUserDto!): DeleteVtxUserResponse!
4129
+ createSportsEvent(input: CreateSportEventDto!): SportsEvent!
4130
+ updateSportsEvent(input: UpdateSportEventDto!): SportsEvent!
4131
+ deleteSportsEvent(eventId: String!): EditValueResponse!
4132
+ mergeSportsEvents(input: MergeSportsEventsDto!): MergeEventsResponse!
4133
+ setFundingStatus(input: SetFundingStatusDto!): FundRaisingCampaign!
4134
+ createFundingCampaign(input: CreateFundingCampaignDto!): FundRaisingCampaign!
4135
+ updateFundingCampaign(input: UpdateFundingCampaignDto!): FundRaisingCampaign!
4136
+ deleteFundingCampaign(input: DeleteSingleValueDto!): DeleteSingleValueResponse!
4137
+ deleteFundingCampaigns(input: DeleteValuesDto!): DeleteValuesResponse!
4138
+ deleteCompetitionBudget(competitionId: String!): Boolean!
4139
+ addCompetitionBudget(input: AddCompetitionBudgetDto!): Boolean!
4140
+ editCompetitionBudget(input: EditCompetitionBudgetDto!): Boolean!
4141
+ editCampaignBudget(input: EditCampaignBudgetDto!): Boolean!
4142
+ editCompetitionBudgetForCampaign(input: EditCampaignBudgetDto!): Boolean!
4143
+ sendThankYou(input: SendThankYouDto!): DonationThankYou!
4144
+ updateThankYouTemplate(input: UpdateThankYouTemplateDto!): FundRaisingCampaign!
4145
+ createMembershipOrganization(input: CreateMembershipOrganizationDto!): MembershipOrganizationReference!
4146
+ createAthleteMembershipAffilation(input: CreateAthleteMembershipDto!): AthleteMembership!
4147
+ deleteAthleteMembershipAffilation(input: DeleteSingleValueDto!): DeleteSingleValueResponse!
4148
+ updateAthleteIntegration(type: String!): Boolean!
4149
+ unlinkInstagram: Boolean!
4150
+ createStripeAccount(input: CreateStripeAccountDto!): StripeAccountReference!
4151
+ createAthleteStripeSession: StripeSession!
4152
+ createStripeCheckoutSession(input: DonationCheckoutDto!): StripeCheckoutSession!
4153
+ createStripeLoginLink: String!
4154
+ createStripeAccountLink: String!
4155
+ registerMember(input: RegisterMemberDto!): Member!
4156
+ createOffer(input: CreateOfferDto!): Offer!
4157
+ updateOffer(id: String!, input: CreateOfferDto!): Offer!
4158
+ deleteOffer(id: String!): Boolean!
4159
+ setOfferStatus(id: String!, status: String!): Offer!
4160
+ activateOffer(id: String!): Offer!
4161
+ deactivateOffer(id: String!): Offer!
4162
+ claimOffer(offerId: String!, athleteId: String!): OfferClaim!
4163
+ removeOfferClaim(claimId: String!, athleteId: String!): Boolean!
4164
+ uploadCouponCodes(offerId: String!, csvContent: String!): UploadResult!
4165
+ rebuildLeaderboardCache: Boolean!
4166
+
4167
+ """Mark a notification as read"""
4168
+ markNotificationAsRead(input: MarkNotificationReadDto!): Notification!
4169
+
4170
+ """Mark all notifications as read, returns count of updated notifications"""
4171
+ markAllNotificationsAsRead: Int!
4172
+
4173
+ """Dismiss a notification"""
4174
+ dismissNotification(input: DismissNotificationDto!): Boolean!
4175
+
4176
+ """Update notification preferences"""
4177
+ updateNotificationPreferences(input: UpdateNotificationPreferenceDto!): NotificationPreference!
4178
+
4179
+ """Register a device token for push notifications"""
4180
+ registerDeviceToken(input: RegisterDeviceTokenDto!): DeviceTokenType!
4181
+
4182
+ """Unregister a device token"""
4183
+ unregisterDeviceToken(input: UnregisterDeviceTokenDto!): Boolean!
4184
+
4185
+ """Follow an athlete"""
4186
+ followAthlete(input: FollowAthleteInput!): Boolean!
4187
+
4188
+ """Unfollow an athlete"""
4189
+ unfollowAthlete(input: UnfollowAthleteInput!): Boolean!
4190
+ createEmailCampaign(input: CreateEmailCampaignDto!): EmailCampaign!
4191
+ updateEmailCampaign(id: String!, input: UpdateEmailCampaignDto!): EmailCampaign!
4192
+ deleteEmailCampaign(id: String!): Boolean!
4193
+ cloneEmailCampaign(id: String!): EmailCampaign!
4194
+ sendTestEmail(campaignId: String!, adminEmail: String!): Boolean!
4195
+ sendBulkEmail(campaignId: String!): Boolean!
4196
+ scheduleEmailCampaign(campaignId: String!, scheduledFor: DateTime!): EmailCampaign!
4197
+ cancelScheduledEmail(campaignId: String!): EmailCampaign!
4198
+ createEmailSegment(input: CreateEmailSegmentDto!): EmailSegment!
4199
+ updateEmailSegment(id: String!, input: UpdateEmailSegmentDto!): EmailSegment!
4200
+ deleteEmailSegment(id: String!): Boolean!
4201
+
4202
+ """Send a chat message to AI Coach and receive a response"""
4203
+ sendAiCoachMessage(input: SendChatMessageDto!): AiCoachMessage!
4204
+
4205
+ """Update AI Coach preferences"""
4206
+ updateAiCoachConfig(input: UpdateAiCoachConfigDto!): AiCoachConfig!
4207
+
4208
+ """Mark an AI Coach nudge as read"""
4209
+ markAiCoachNudgeRead(nudgeId: String!): Boolean!
4210
+
4211
+ """Create a new team"""
4212
+ createTeam(input: CreateTeamInput!): Team!
4213
+
4214
+ """Update an existing team"""
4215
+ updateTeam(input: UpdateTeamInput!): Team!
4216
+
4217
+ """Join a team for a specific sport"""
4218
+ joinTeam(input: JoinTeamInput!): AthleteTeam!
4219
+
4220
+ """Leave a team"""
4221
+ leaveTeam(teamId: String!): AthleteTeam!
4222
+
4223
+ """Invite an athlete to a team"""
4224
+ inviteToTeam(teamId: String!, athleteId: String!, sportId: String!): AthleteTeam!
4225
+
4226
+ """Manage a team member (approve/reject/remove/promote/demote)"""
4227
+ manageTeamMember(input: ManageTeamMemberInput!): AthleteTeam!
4228
+
4229
+ """Approve or reject a team (admin only)"""
4230
+ approveTeam(teamId: String!, approved: Boolean!): Team!
4231
+
4232
+ """
4233
+ Create a Stripe Connect account for a team (owner only). Returns onboarding URL.
4234
+ """
4235
+ createTeamStripeAccount(teamId: String!): String!
4236
+
4237
+ """
4238
+ Create a donation checkout session for a team. Returns checkout URL/secret.
4239
+ """
4240
+ createTeamDonationCheckout(teamId: String!, amount: Float!, currency: String! = "usd", donorEmail: String, donorName: String): String!
4241
+
4242
+ """Create a new club"""
4243
+ createClub(input: CreateClubInput!): Club!
4244
+
4245
+ """Update an existing club"""
4246
+ updateClub(input: UpdateClubInput!): Club!
4247
+
4248
+ """Join a club"""
4249
+ joinClub(input: JoinClubInput!): AthleteClub!
4250
+
4251
+ """Leave a club"""
4252
+ leaveClub(clubId: String!): AthleteClub!
4253
+
4254
+ """Invite an athlete to a club"""
4255
+ inviteToClub(clubId: String!, athleteId: String!): AthleteClub!
4256
+
4257
+ """Manage a club member (approve/reject/remove/promote/demote)"""
4258
+ manageClubMember(input: ManageClubMemberInput!): AthleteClub!
4259
+
4260
+ """Approve or reject a club (admin only)"""
4261
+ approveClub(clubId: String!, approved: Boolean!): Club!
4262
+
4263
+ """
4264
+ Create a Stripe Connect account for a club (owner only). Returns onboarding URL.
4265
+ """
4266
+ createClubStripeAccount(clubId: String!): String!
4267
+
4268
+ """
4269
+ Create a donation checkout session for a club. Returns checkout URL/secret.
4270
+ """
4271
+ createClubDonationCheckout(clubId: String!, amount: Float!, currency: String! = "usd", donorEmail: String, donorName: String): String!
4272
+
4273
+ """
4274
+ Create a membership fee checkout for joining a paid club. Returns checkout URL/secret, or null if free.
4275
+ """
4276
+ createMembershipFeeCheckout(clubId: String!): String
4277
+ }
4278
+
4279
+ input CreateTenantInput {
4280
+ name: String!
4281
+ email: String!
4282
+ tenant_uri: String!
4283
+ domain: String!
4284
+ }
4285
+
4286
+ input CreateActiveUserInput {
4287
+ loginEmail: String!
4288
+ password: String
4289
+ loginMethod: String
4290
+ clientType: String
4291
+ }
4292
+
4293
+ input RegisterUserToDomainFromEmailInput {
4294
+ email: String!
4295
+ domainId: String!
4296
+ tenantId: String
4297
+ createUserIfNotExist: Boolean = false
4298
+ }
4299
+
4300
+ input RefreshTokenInput {
4301
+ refreshToken: String!
4302
+ }
4303
+
4304
+ input AWSS3DeleteUseTypeFileDto {
4305
+ name: String!
4306
+ useType: String!
4307
+ }
4308
+
4309
+ input AWSS3DeleteBucketFileDto {
4310
+ key: String!
4311
+ bucket: String!
4312
+ credentialsId: String
4313
+ }
4314
+
4315
+ input AWSS3DeleteUseTypeKeyDto {
4316
+ key: String!
4317
+ useType: String!
4318
+ }
4319
+
4320
+ input CreateIndustryDto {
4321
+ name: String!
4322
+ }
4323
+
4324
+ input RegisterSponsorInput {
4325
+ name: String!
4326
+ phone: String
4327
+ hasWhatsapp: Boolean! = false
4328
+ companyName: String
4329
+ companyEmail: String!
4330
+ industryId: String!
4331
+ companySize: String!
4332
+ operatorType: String!
4333
+ numberOfAthletes: String!
4334
+ brands: [String!]!
4335
+ }
4336
+
4337
+ input UpdateSponsorDto {
4338
+ name: String
4339
+ description: String
4340
+ email: String
4341
+ }
4342
+
4343
+ input RegisterAthleteDto {
4344
+ email: String!
4345
+ firstName: String!
4346
+ lastName: String!
4347
+ screenName: String
4348
+ nationality: String!
4349
+ cityId: String!
4350
+ locLatitude: Float
4351
+ locLongitude: Float
4352
+ dateOfBirth: DateTime!
4353
+ lgbt: Boolean = false
4354
+ trainer: String
4355
+ trainerUrl: String
4356
+ aboutMe: String
4357
+ team: String
4358
+ gender: String!
4359
+ mainSport: String!
4360
+ mainSportLevel: String!
4361
+ profilePicture: AWSS3UploadedFileDto
4362
+ cardPicture: AWSS3UploadedFileDto
4363
+ }
4364
+
4365
+ input EditValueDto {
4366
+ field: String!
4367
+ newValue: String
4368
+ }
4369
+
4370
+ input EditDisplayIndexDto {
4371
+ updates: [AlbumIndexUpdate!]!
4372
+ }
4373
+
4374
+ input AlbumIndexUpdate {
4375
+ id: String!
4376
+ newIndex: Float!
4377
+ }
4378
+
4379
+ input SetCurrentCampaignDto {
4380
+ campaignId: String!
4381
+ }
4382
+
4383
+ input CreateSportDto {
4384
+ _id: String!
4385
+ name: String!
4386
+ priority: Float = 100
4387
+ resultType: String = "POSITION"
4388
+ }
4389
+
4390
+ input UpdateSportDto {
4391
+ _id: String!
4392
+ name: String!
4393
+ }
4394
+
4395
+ input CreateSportLevelDto {
4396
+ _id: String!
4397
+ label: String!
4398
+ index: Float!
4399
+ translations: [CreateSportLevelTranslationDto!]
4400
+ }
4401
+
4402
+ input CreateSportLevelTranslationDto {
4403
+ language: String!
4404
+ label: String!
4405
+ }
4406
+
4407
+ input CreateSponsorshipDto {
4408
+ title: String!
4409
+ brandId: String!
4410
+ description: String
4411
+ cashValue: Float = 0
4412
+ otherValue: Float = 0
4413
+ banner: AWSS3UploadedFileDto
4414
+ criteria: AthleteCriteriaDto
4415
+ deadline: DateTime
4416
+ startDate: DateTime
4417
+ duration: DurationDto!
4418
+ sponsorshipItems: [SponsorshipItemDto!]
4419
+ commitments: [SponsorshipCommitmentDto!]
4420
+ terms: String
4421
+ published: Boolean = true
4422
+ isPrivate: Boolean = false
4423
+ translations: [SponsorshipTranslationDto!]
4424
+ }
4425
+
4426
+ input DurationDto {
4427
+ length: Float! = 1
4428
+ unit: String! = "YEARS"
4429
+ }
4430
+
4431
+ input SponsorshipItemDto {
4432
+ _id: String!
4433
+ quantity: Float! = 1
4434
+ title: String!
4435
+ value: Float! = 0
4436
+ }
4437
+
4438
+ input SponsorshipCommitmentDto {
4439
+ _id: String!
4440
+ title: String!
4441
+ details: String
4442
+ hashTags: [String!]
4443
+ media: String!
4444
+ actionType: String!
4445
+ frequency: Float = 1
4446
+ periodicity: String!
4447
+ }
4448
+
4449
+ input SponsorshipTranslationDto {
4450
+ sponsorshipId: String!
4451
+ language: String!
4452
+ title: String
4453
+ description: String
4454
+ banner: AWSS3UploadedFileDto
4455
+ terms: String
4456
+ }
4457
+
4458
+ input CreateCountryDto {
4459
+ _id: String!
4460
+ name: String!
4461
+ }
4462
+
4463
+ input CreateStateDto {
4464
+ _id: String!
4465
+ name: String!
4466
+ countryId: String!
4467
+ }
4468
+
4469
+ input CreateCityDto {
4470
+ _id: String!
4471
+ cityName: String!
4472
+ cityNameLocalized: String!
4473
+ lat: Float!
4474
+ lng: Float!
4475
+ stateId: String!
4476
+ timezone: String!
4477
+ city_alt: String
4478
+ iso3: String
4479
+ admin_type: String
4480
+ capital: String
4481
+ density: Float
4482
+ population: Float
4483
+ population_proper: Float
4484
+ ranking: Float
4485
+ same_name: String
4486
+ }
4487
+
4488
+ input CreateSportEventDto {
4489
+ name: String!
4490
+ cityId: String
4491
+ sportId: String
4492
+ startDate: DateTime!
4493
+ endDate: DateTime
4494
+ website: String
4495
+ banner: AWSS3UploadedFileDto
4496
+ eventLevel: String = "Unranked"
4497
+ }
4498
+
4499
+ input SendThankYouDto {
4500
+ campaignId: String!
4501
+ donationId: String!
4502
+ customMessage: String
4503
+ }
4504
+
4505
+ input UpdateThankYouTemplateDto {
4506
+ campaignId: String!
4507
+ thankYouMessage: String
4508
+ thankYouMediaUrl: String
4509
+ autoSendThankYou: Boolean
4510
+ }
4511
+
4512
+ input CreateStripeAccountDto {
4513
+ countryId: String!
4514
+ acceptedTermsId: String!
4515
+ acceptedPrivacyId: String!
4516
+ }
4517
+
4518
+ input CreateEmailCampaignDto {
4519
+ """Email subject line"""
4520
+ subject: String!
4521
+
4522
+ """SendGrid template ID (if using template)"""
4523
+ templateId: String
4524
+
4525
+ """Template name (for audit trail)"""
4526
+ templateName: String
4527
+
4528
+ """Raw HTML content (from rich text editor)"""
4529
+ htmlContent: String
4530
+
4531
+ """Audience filter criteria"""
4532
+ audienceFilters: AudienceFilterDto!
4533
+
4534
+ """Saved segment ID (if using preset)"""
4535
+ segmentId: String
4536
+
4537
+ """Scheduled send date/time"""
4538
+ scheduledFor: DateTime
4539
+ }
4540
+
4541
+ input UpdateEmailCampaignDto {
4542
+ """Email subject line"""
4543
+ subject: String
4544
+
4545
+ """SendGrid template ID"""
4546
+ templateId: String
4547
+
4548
+ """Template name"""
4549
+ templateName: String
4550
+
4551
+ """Raw HTML content"""
4552
+ htmlContent: String
4553
+
4554
+ """Audience filter criteria"""
4555
+ audienceFilters: AudienceFilterDto
4556
+
4557
+ """Saved segment ID"""
4558
+ segmentId: String
4559
+
4560
+ """Scheduled send date/time"""
4561
+ scheduledFor: DateTime
4562
+ }
4563
+
4564
+ input CreateEmailSegmentDto {
4565
+ """Segment name"""
4566
+ name: String!
4567
+
4568
+ """Audience filter criteria for this segment"""
4569
+ filters: AudienceFilterDto!
4570
+ }
4571
+
4572
+ input UpdateEmailSegmentDto {
4573
+ """Segment name"""
4574
+ name: String
4575
+
4576
+ """Audience filter criteria"""
4577
+ filters: AudienceFilterDto
4578
+ }