@codecks/fetch 0.1.5 → 0.1.7

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 (114) hide show
  1. package/README.md +317 -10
  2. package/dist/_exploration/api-requester.d.ts +4 -4
  3. package/dist/_exploration/api-requester.js +5 -4
  4. package/dist/_exploration/create-hooks.d.ts +47 -5
  5. package/dist/_exploration/create-hooks.js +193 -88
  6. package/dist/_exploration/loader.d.ts +2 -2
  7. package/dist/_exploration/loader.js +7 -2
  8. package/dist/_exploration/store.d.ts +4 -4
  9. package/dist/_exploration/store.js +76 -73
  10. package/dist/{_root-D1Faf8cg.d.ts → _root-BW9uzB79.d.ts} +1 -1
  11. package/dist/immediate-cache-DiH8tpJM.js +237 -0
  12. package/dist/{index-DUBsesYl.d.ts → index-k-KPWV9R.d.ts} +8 -1
  13. package/dist/index.d.ts +4 -4
  14. package/dist/index.js +6 -5
  15. package/dist/{loader-types-Dp0CSVTf.d.ts → loader-types-fd5tV0FD.d.ts} +4 -8
  16. package/dist/{loader-utils-Du-CTKH-.d.ts → loader-utils-BqZKAn_v.d.ts} +2 -2
  17. package/dist/{query-helpers-DsMMOtSO.js → query-helpers-iX1fiqLv.js} +41 -16
  18. package/dist/{query-type-Dx5ZCv5N.d.ts → query-type-BqQ9oX_U.d.ts} +55 -10
  19. package/dist/{store-B6JWZnAO.d.ts → store-BvEJzUVp.d.ts} +104 -6
  20. package/package.json +4 -3
  21. package/schema/models/account.md +104 -0
  22. package/schema/models/accountOnboarding.md +15 -0
  23. package/schema/models/accountOnboardingStep.md +14 -0
  24. package/schema/models/accountRole.md +19 -0
  25. package/schema/models/accountUserAchievement.md +17 -0
  26. package/schema/models/accountUserSetting.md +20 -0
  27. package/schema/models/activeTimeTracker.md +19 -0
  28. package/schema/models/activity.md +30 -0
  29. package/schema/models/affiliateCode.md +30 -0
  30. package/schema/models/affiliateCodeStat.md +19 -0
  31. package/schema/models/app.md +10 -0
  32. package/schema/models/appInstallation.md +19 -0
  33. package/schema/models/assigneeAssignment.md +18 -0
  34. package/schema/models/assigneeDeckAssignment.md +20 -0
  35. package/schema/models/attachment.md +23 -0
  36. package/schema/models/autoFinishedTimeTrackingSegment.md +20 -0
  37. package/schema/models/card.md +82 -0
  38. package/schema/models/cardDiffNotification.md +22 -0
  39. package/schema/models/cardHistory.md +20 -0
  40. package/schema/models/cardOrder.md +17 -0
  41. package/schema/models/cardOrderInDeck.md +18 -0
  42. package/schema/models/cardPreset.md +19 -0
  43. package/schema/models/cardSubscription.md +19 -0
  44. package/schema/models/cardUpvote.md +21 -0
  45. package/schema/models/cardsEffortHistory.md +9 -0
  46. package/schema/models/cardsFinishedHistory.md +16 -0
  47. package/schema/models/cardsStatusHistory.md +9 -0
  48. package/schema/models/cardsTimeToFinished.md +18 -0
  49. package/schema/models/dailyDiscordGuildVoteMembership.md +15 -0
  50. package/schema/models/dailyPublicProjectMembership.md +15 -0
  51. package/schema/models/deck.md +53 -0
  52. package/schema/models/deckAssignment.md +18 -0
  53. package/schema/models/deckGuardian.md +17 -0
  54. package/schema/models/deckSubscription.md +18 -0
  55. package/schema/models/discordGuild.md +30 -0
  56. package/schema/models/discordMember.md +21 -0
  57. package/schema/models/discordProjectNotification.md +19 -0
  58. package/schema/models/discordSlashCommand.md +28 -0
  59. package/schema/models/dueCard.md +18 -0
  60. package/schema/models/file.md +26 -0
  61. package/schema/models/handCard.md +18 -0
  62. package/schema/models/integration.md +23 -0
  63. package/schema/models/invoice.md +21 -0
  64. package/schema/models/lastSeenCardUpvote.md +17 -0
  65. package/schema/models/milestone.md +39 -0
  66. package/schema/models/milestoneProgress.md +14 -0
  67. package/schema/models/milestoneProject.md +17 -0
  68. package/schema/models/pinnedMilestone.md +22 -0
  69. package/schema/models/project.md +58 -0
  70. package/schema/models/projectOrder.md +18 -0
  71. package/schema/models/projectSelection.md +18 -0
  72. package/schema/models/projectTag.md +19 -0
  73. package/schema/models/projectUser.md +18 -0
  74. package/schema/models/projectUserSetting.md +15 -0
  75. package/schema/models/publicProjectInfo.md +20 -0
  76. package/schema/models/publicProjectMembership.md +17 -0
  77. package/schema/models/publicProjectVisit.md +16 -0
  78. package/schema/models/queueEntry.md +21 -0
  79. package/schema/models/queueSelection.md +19 -0
  80. package/schema/models/release.md +12 -0
  81. package/schema/models/resolvable.md +32 -0
  82. package/schema/models/resolvableEntry.md +28 -0
  83. package/schema/models/resolvableEntryHistory.md +20 -0
  84. package/schema/models/resolvableEntryReaction.md +23 -0
  85. package/schema/models/resolvableNotification.md +30 -0
  86. package/schema/models/resolvableParticipant.md +25 -0
  87. package/schema/models/resolvableParticipantHistory.md +23 -0
  88. package/schema/models/savedSearch.md +18 -0
  89. package/schema/models/sprint.md +42 -0
  90. package/schema/models/sprintConfig.md +38 -0
  91. package/schema/models/sprintConfigProgress.md +14 -0
  92. package/schema/models/sprintProgress.md +14 -0
  93. package/schema/models/sprintProject.md +17 -0
  94. package/schema/models/stripeAccountSync.md +29 -0
  95. package/schema/models/timeTrackingSegment.md +24 -0
  96. package/schema/models/timeTrackingSum.md +18 -0
  97. package/schema/models/user.md +67 -0
  98. package/schema/models/userDismissedHint.md +16 -0
  99. package/schema/models/userEmail.md +18 -0
  100. package/schema/models/userInvitation.md +20 -0
  101. package/schema/models/userInviteCode.md +23 -0
  102. package/schema/models/userOnboarding.md +14 -0
  103. package/schema/models/userProjectAccess.md +17 -0
  104. package/schema/models/userReportEmail.md +19 -0
  105. package/schema/models/userReportSetting.md +23 -0
  106. package/schema/models/userReportToken.md +18 -0
  107. package/schema/models/userTag.md +18 -0
  108. package/schema/models/visionBoard.md +21 -0
  109. package/schema/models/visionBoardQuery.md +22 -0
  110. package/schema/models/wizard.md +19 -0
  111. package/schema/models/workflowItem.md +45 -0
  112. package/schema/models/workflowItemHistory.md +18 -0
  113. package/schema/overview.md +110 -0
  114. package/schema/query-syntax.md +184 -0
@@ -1,9 +1,36 @@
1
- import { ModelDesc, ModelQuery, RelationEntry, TypedField } from "./query-type-Dx5ZCv5N.js";
2
- import { AccountId, AccountOnboardingStepId, ActiveTimeTrackerId, ActivityId, AffiliateCodeId, AppId, AppInstallationId, AttachmentId, CardId, CardPresetId, CardSubscriptionId, CardUpvoteId, DeckId, DeckSubscriptionId, DiscordGuildId, DiscordMemberId, DiscordProjectNotificationId, DiscordSlashCommandId, FileId, IntegrationId, InvoiceId, MilestoneId, PinnedMilestoneId, ProjectId, ProjectSelectionId, ProjectTagId, QueueEntryId, QueueSelectionId, ReleaseId, ResolvableEntryId, ResolvableEntryReactionId, ResolvableId, SavedSearchId, SprintConfigId, SprintId, TimeTrackingSegmentId, UserEmailId, UserId, UserInvitationId, UserInviteCodeId, UserReportEmailId, UserReportSettingId, UserReportTokenId, UserTagId, VisionBoardId, VisionBoardQueryId, WizardId, WorkflowItemId, modelMap$1 as modelMap } from "./index-DUBsesYl.js";
3
- import { BaseLoader, LoaderResult } from "./loader-types-Dp0CSVTf.js";
1
+ import { ModelDesc, ModelQuery, RelationEntry, TypedField } from "./query-type-BqQ9oX_U.js";
2
+ import { AccountId, AccountOnboardingStepId, ActiveTimeTrackerId, ActivityId, AffiliateCodeId, AppId, AppInstallationId, AttachmentId, CardId, CardPresetId, CardSubscriptionId, CardUpvoteId, DeckId, DeckSubscriptionId, DiscordGuildId, DiscordMemberId, DiscordProjectNotificationId, DiscordSlashCommandId, FileId, IntegrationId, InvoiceId, MilestoneId, PinnedMilestoneId, ProjectId, ProjectSelectionId, ProjectTagId, QueueEntryId, QueueSelectionId, ReleaseId, ResolvableEntryId, ResolvableEntryReactionId, ResolvableId, SavedSearchId, SprintConfigId, SprintId, TimeTrackingSegmentId, UserEmailId, UserId, UserInvitationId, UserInviteCodeId, UserReportEmailId, UserReportSettingId, UserReportTokenId, UserTagId, VisionBoardId, VisionBoardQueryId, WizardId, WorkflowItemId, modelMap$1 as modelMap } from "./index-k-KPWV9R.js";
3
+ import { BaseLoader, LoaderResult, MissingDataRequest } from "./loader-types-fd5tV0FD.js";
4
4
 
5
+ //#region src/_exploration/optimistic-manager.d.ts
6
+
7
+ /**
8
+ * Represents a single optimistic update layer
9
+ * Contains field updates for one mutation
10
+ * Internal implementation - wrapped by ImmediateCache to provide full OptimisticUpdater interface
11
+ */
12
+ declare class OptimisticLayer {
13
+ private data;
14
+ private affectedFields;
15
+ setField(model: string, id: string, field: string, value: any): void;
16
+ hasChanges(): boolean;
17
+ getAffectedFieldKeys(): Iterable<string>;
18
+ entries(): IterableIterator<[string, any]>;
19
+ }
20
+ /**
21
+ * Manages a stack of optimistic layers with O(1) lookups
22
+ *
23
+ * Design:
24
+ * - Maintains a stack of layers (one per in-flight mutation)
25
+ * - Rebuilds flattened view when layers added/removed for fast reads
26
+ * - Later layers override earlier ones (parallel updates supported)
27
+ * - Auto-cleanup via promise lifecycle
28
+ */
29
+ //#endregion
5
30
  //#region src/_exploration/immediate-cache.d.ts
6
31
  type FieldMeta = {
32
+ state: "optimistic";
33
+ } | {
7
34
  state: "fresh";
8
35
  } | {
9
36
  state: "dirty";
@@ -13,21 +40,58 @@ interface FieldCache<T = any> {
13
40
  partKeys: string[];
14
41
  meta: FieldMeta;
15
42
  }
43
+ type FieldLocation = {
44
+ model: string;
45
+ id: string;
46
+ field: string;
47
+ fieldKey: string;
48
+ type: "field" | "relation";
49
+ cache: FieldCache;
50
+ };
16
51
  type ModelInstance = Map<string, FieldCache>;
17
52
  type ModelCache = Map<string, ModelInstance>;
53
+ type FieldSub = () => void;
54
+ /**
55
+ * Wrapper that provides full OptimisticUpdater interface
56
+ * Delegates writes to OptimisticLayer and reads to ImmediateCache
57
+ */
58
+ declare class OptimisticUpdater {
59
+ private layer;
60
+ private cache;
61
+ constructor(layer: OptimisticLayer,
62
+ // OptimisticLayer from optimistic-manager
63
+ cache: ImmediateCache);
64
+ setField(model: string, id: string, field: string, value: any): void;
65
+ getField(model: string, id: string, field: string): FieldCache | undefined;
66
+ }
18
67
  declare class ImmediateCache {
19
68
  cache: ModelCache;
20
- partKeyToFields: Map<string, FieldCache<any>[]>;
69
+ partKeyToFields: Map<string, FieldLocation[]>;
70
+ private fieldSubscriptions;
71
+ private optimisticManager;
21
72
  private getInstanceKey;
22
73
  get(model: string, key: string, field: string): FieldCache | undefined;
74
+ subscribe(fieldKey: string, notifyFn: FieldSub): () => void;
23
75
  set(model: string, key: string, partialInstance: Record<string, {
24
76
  value: unknown;
25
77
  partKeys: string[];
26
- }>, meta: FieldMeta): void;
27
- setMetaByPartKeys(partKeys: string[], meta: FieldMeta): void;
78
+ type: "field" | "relation";
79
+ }>, meta: FieldMeta): FieldSub[];
80
+ markDirty(partKeys: string[]): MissingDataRequest[];
81
+ /**
82
+ * Create a new optimistic layer bound to a promise and apply updates
83
+ * The layer will be automatically removed when the promise settles
84
+ * @param promise - Promise to bind the layer lifecycle to
85
+ * @param updateFn - Function to apply optimistic updates to the layer
86
+ * @returns The updater object with both read and write capabilities
87
+ */
88
+ createOptimisticLayer(promise: Promise<any>, updateFn: (updater: OptimisticUpdater) => void): OptimisticUpdater;
28
89
  }
29
90
  //#endregion
30
91
  //#region src/_exploration/store.d.ts
92
+ type QueryDep = {
93
+ keys: string[];
94
+ };
31
95
  type ModelMap = typeof modelMap;
32
96
  declare class Store {
33
97
  private loader;
@@ -834,6 +898,7 @@ declare class Store {
834
898
  }>;
835
899
  attachments: RelationEntry<"attachment", {
836
900
  readonly type: "hasMany";
901
+ readonly fkAsArray: true;
837
902
  }>;
838
903
  diffs: RelationEntry<"cardHistory", {
839
904
  readonly type: "hasMany";
@@ -846,15 +911,19 @@ declare class Store {
846
911
  }>;
847
912
  childCards: RelationEntry<"card", {
848
913
  readonly type: "hasMany";
914
+ readonly fkAsArray: true;
849
915
  }>;
850
916
  inDeps: RelationEntry<"card", {
851
917
  readonly type: "hasMany";
918
+ readonly fkAsArray: true;
852
919
  }>;
853
920
  outDeps: RelationEntry<"card", {
854
921
  readonly type: "hasMany";
922
+ readonly fkAsArray: true;
855
923
  }>;
856
924
  cardReferences: RelationEntry<"card", {
857
925
  readonly type: "hasMany";
926
+ readonly fkAsArray: true;
858
927
  }>;
859
928
  upvotes: RelationEntry<"cardUpvote", {
860
929
  readonly type: "hasMany";
@@ -2550,13 +2619,18 @@ declare class Store {
2550
2619
  }>;
2551
2620
  inDeps: RelationEntry<"workflowItem", {
2552
2621
  readonly type: "hasMany";
2622
+ readonly fkAsArray: true;
2553
2623
  }>;
2554
2624
  outDeps: RelationEntry<"workflowItem", {
2555
2625
  readonly type: "hasMany";
2626
+ readonly fkAsArray: true;
2556
2627
  }>;
2557
2628
  }, ["itemId"]>;
2558
2629
  };
2630
+ requestedRelationKeys: Map<string, QueryDep>;
2559
2631
  constructor(loader: BaseLoader);
2632
+ subscribeToField(fieldKey: string, notifyFn: () => void): () => void;
2633
+ invalidate(partKeyPatterns: string[]): void;
2560
2634
  loadData(model: keyof ModelMap, ids: string[], q: ModelQuery<any, any>, acceptDirty?: boolean, iteration?: number): LoaderResult;
2561
2635
  onLoaded(model: string, key: string, partialInstance: Record<string, unknown>): void;
2562
2636
  /**
@@ -2564,6 +2638,30 @@ declare class Store {
2564
2638
  * Accumulates missing requests in the missingRequests array
2565
2639
  */
2566
2640
  private checkQueryRecursive;
2641
+ /**
2642
+ * Execute a mutation with optimistic updates
2643
+ *
2644
+ * @example
2645
+ * ```typescript
2646
+ * await store.mutate(
2647
+ * () => api.updateCard('123', {title: 'New Title'}),
2648
+ * {
2649
+ * onMutate: (layer) => {
2650
+ * layer.setField('Card', '123', 'title', 'New Title');
2651
+ * },
2652
+ * onSuccess: () => {
2653
+ * // Optional: invalidate related queries
2654
+ * store.invalidate(['Card:123:title']);
2655
+ * }
2656
+ * }
2657
+ * );
2658
+ * ```
2659
+ */
2660
+ mutate<T>(mutationFn: () => Promise<T>, options?: {
2661
+ onMutate?: (updater: OptimisticUpdater) => void;
2662
+ onSuccess?: (data: T) => void;
2663
+ onError?: (error: unknown) => void;
2664
+ }): Promise<T>;
2567
2665
  }
2568
2666
  //#endregion
2569
2667
  export { Store };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@codecks/fetch",
3
- "version": "0.1.5",
3
+ "version": "0.1.7",
4
4
  "description": "Quickly create deeply nested queries for the Codecks API with advanced TypeScript support",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -14,7 +14,8 @@
14
14
  },
15
15
  "author": "Daniel Berndt <daniel@codecks.io>",
16
16
  "files": [
17
- "dist"
17
+ "dist",
18
+ "schema"
18
19
  ],
19
20
  "main": "./dist/index.js",
20
21
  "module": "./dist/index.js",
@@ -31,7 +32,7 @@
31
32
  "access": "public"
32
33
  },
33
34
  "scripts": {
34
- "build": "tsdown",
35
+ "build": "tsdown && vite-node scripts/generate-schema-docs.ts",
35
36
  "format": "prettier --write .",
36
37
  "check-format": "prettier --check .",
37
38
  "dev": "tsdown --watch",
@@ -0,0 +1,104 @@
1
+ # account
2
+
3
+ Key: `id`
4
+
5
+ ## Fields
6
+
7
+ - `id`: string
8
+ - `subdomain`: string
9
+ - `name`: string
10
+ - `billingName`: string, optional
11
+ - `billingLine1`: string, optional
12
+ - `billingLine2`: string, optional
13
+ - `billingZip`: string, optional
14
+ - `billingCity`: string, optional
15
+ - `billingCountryCode`: string, optional
16
+ - `billingEmail`: string, optional
17
+ - `netGiftAmount`: number
18
+ - `persona`: string, optional
19
+ - `createdAt`: Date (ISO string)
20
+ - `disabledAt`: Date (ISO string), optional
21
+ - `totalMediaByteUsage`: bigint
22
+ - `isDisabled`: string
23
+ - `milestonesEnabled`: string
24
+ - `sprintsEnabled`: string
25
+ - `priorityLabels`: object
26
+ - `effortScale`: object
27
+ - `statusChangeDurations`: object
28
+ - `activeFeatureFlags`: object
29
+ - `timeTrackingMode`: string
30
+ - `maxTimeTrackingSegmentMsDuration`: number
31
+ - `timeTrackingSwimLaneInfo`: boolean
32
+ - `workdays`: string
33
+ - `workflowMode`: string
34
+ - `isLearning`: boolean
35
+ - `isNonProfit`: boolean
36
+ - `dependenciesEnabled`: boolean
37
+ - `maxHandSlotCount`: number
38
+ - `seats`: number
39
+ - `activeProjectCount`: number
40
+ - `billingType`: string
41
+ - `allowInheritHeroCover`: boolean
42
+ - `attachmentCoverMode`: string
43
+ - `staffPermission`: string
44
+ - `offeringTrial`: boolean
45
+ - `coupon`: object, optional
46
+ - `hideCompletedCardCountForDecks`: boolean
47
+ - `visionBoardEnabled`: boolean
48
+ - `fallbackEffort`: number
49
+ - `timelineScaleType`: string
50
+ - `startWeekday`: string
51
+ - `disabledById`: string (foreign key ID) → user, optional
52
+
53
+ ## Relations
54
+
55
+ ### belongsTo
56
+
57
+ - `disabledBy` → [user](user.md) (via `disabledById`)
58
+
59
+ ### hasOne
60
+
61
+ - `githubIntegration` → [integration](integration.md)
62
+ - `slackIntegration` → [integration](integration.md)
63
+ - `stripeAccountSync` → [stripeAccountSync](stripeAccountSync.md)
64
+ - `accountOnboarding` → [accountOnboarding](accountOnboarding.md)
65
+
66
+ ### hasMany
67
+
68
+ - `cards` → [card](card.md)
69
+ - `invoices` → [invoice](invoice.md)
70
+ - `cardPresets` → [cardPreset](cardPreset.md)
71
+ - `attachments` → [attachment](attachment.md)
72
+ - `discordGuilds` → [discordGuild](discordGuild.md)
73
+ - `timeTrackingSegments` → [timeTrackingSegment](timeTrackingSegment.md)
74
+ - `workflowItems` → [workflowItem](workflowItem.md)
75
+ - `deckAssignments` → [deckAssignment](deckAssignment.md)
76
+ - `assigneeAssignments` → [assigneeAssignment](assigneeAssignment.md)
77
+ - `assigneeDeckAssignments` → [assigneeDeckAssignment](assigneeDeckAssignment.md)
78
+ - `wizards` → [wizard](wizard.md)
79
+ - `milestones` → [milestone](milestone.md)
80
+ - `sprints` → [sprint](sprint.md)
81
+ - `sprintConfigs` → [sprintConfig](sprintConfig.md)
82
+ - `handCards` → [handCard](handCard.md)
83
+ - `resolvables` → [resolvable](resolvable.md)
84
+ - `cardUpvotes` → [cardUpvote](cardUpvote.md)
85
+ - `resolvableParticipants` → [resolvableParticipant](resolvableParticipant.md)
86
+ - `userReportSettings` → [userReportSetting](userReportSetting.md)
87
+ - `cardOrders` → [cardOrder](cardOrder.md)
88
+ - `accountUserAchievements` → [accountUserAchievement](accountUserAchievement.md)
89
+ - `userInviteCodes` → [userInviteCode](userInviteCode.md)
90
+ - `visionBoards` → [visionBoard](visionBoard.md)
91
+ - `deckSubscriptions` → [deckSubscription](deckSubscription.md)
92
+ - `appInstallations` → [appInstallation](appInstallation.md)
93
+ - `files` → [file](file.md)
94
+ - `decks` → [deck](deck.md)
95
+ - `queueEntries` → [queueEntry](queueEntry.md)
96
+ - `visionBoardQueries` → [visionBoardQuery](visionBoardQuery.md)
97
+ - `anyDecks` → [deck](deck.md)
98
+ - `projects` → [project](project.md)
99
+ - `archivedProjects` → [project](project.md)
100
+ - `anyProjects` → [project](project.md)
101
+ - `roles` → [accountRole](accountRole.md)
102
+ - `invitations` → [userInvitation](userInvitation.md)
103
+ - `affiliateCodes` → [affiliateCode](affiliateCode.md)
104
+ - `activities` → [activity](activity.md)
@@ -0,0 +1,15 @@
1
+ # accountOnboarding
2
+
3
+ Key: `accountId`
4
+
5
+ ## Fields
6
+
7
+ - `variants`: array
8
+ - `steps`: object
9
+ - `accountId`: string (foreign key ID) → account
10
+
11
+ ## Relations
12
+
13
+ ### belongsTo
14
+
15
+ - `account` → [account](account.md) (via `accountId`)
@@ -0,0 +1,14 @@
1
+ # accountOnboardingStep
2
+
3
+ Key: `key`
4
+
5
+ ## Fields
6
+
7
+ - `key`: string
8
+ - `title`: string
9
+ - `description`: string
10
+ - `chapter`: string
11
+ - `sortValue`: string
12
+ - `variants`: array
13
+ - `xp`: number
14
+ - `milestone`: string
@@ -0,0 +1,19 @@
1
+ # accountRole
2
+
3
+ Key: `accountId`, `userId`
4
+
5
+ ## Fields
6
+
7
+ - `role`: string
8
+ - `createdAt`: Date (ISO string)
9
+ - `lastChangedAt`: Date (ISO string)
10
+ - `roleAsPrio`: number
11
+ - `userId`: string (foreign key ID) → user
12
+ - `accountId`: string (foreign key ID) → account
13
+
14
+ ## Relations
15
+
16
+ ### belongsTo
17
+
18
+ - `user` → [user](user.md) (via `userId`)
19
+ - `account` → [account](account.md) (via `accountId`)
@@ -0,0 +1,17 @@
1
+ # accountUserAchievement
2
+
3
+ Key: `accountId`, `userId`, `key`
4
+
5
+ ## Fields
6
+
7
+ - `value`: object
8
+ - `context`: object
9
+ - `accountId`: string (foreign key ID) → account
10
+ - `userId`: string (foreign key ID) → user
11
+
12
+ ## Relations
13
+
14
+ ### belongsTo
15
+
16
+ - `account` → [account](account.md) (via `accountId`)
17
+ - `user` → [user](user.md) (via `userId`)
@@ -0,0 +1,20 @@
1
+ # accountUserSetting
2
+
3
+ Key: `accountId`, `userId`
4
+
5
+ ## Fields
6
+
7
+ - `wantsWeeklyDigestMail`: boolean
8
+ - `timelineScaleTypeOverwrite`: string
9
+ - `startWeekdayOverwrite`: string
10
+ - `accountId`: string (foreign key ID) → account
11
+ - `userId`: string (foreign key ID) → user
12
+ - `inboxDeckId`: string (foreign key ID) → deck
13
+
14
+ ## Relations
15
+
16
+ ### belongsTo
17
+
18
+ - `account` → [account](account.md) (via `accountId`)
19
+ - `user` → [user](user.md) (via `userId`)
20
+ - `inboxDeck` → [deck](deck.md) (via `inboxDeckId`)
@@ -0,0 +1,19 @@
1
+ # activeTimeTracker
2
+
3
+ Key: `id`
4
+
5
+ ## Fields
6
+
7
+ - `id`: string
8
+ - `createdAt`: Date (ISO string)
9
+ - `cardId`: string (foreign key ID) → card
10
+ - `userId`: string (foreign key ID) → user
11
+ - `accountId`: string (foreign key ID) → account
12
+
13
+ ## Relations
14
+
15
+ ### belongsTo
16
+
17
+ - `card` → [card](card.md) (via `cardId`)
18
+ - `user` → [user](user.md) (via `userId`)
19
+ - `account` → [account](account.md) (via `accountId`)
@@ -0,0 +1,30 @@
1
+ # activity
2
+
3
+ Key: `id`
4
+
5
+ ## Fields
6
+
7
+ - `id`: string
8
+ - `type`: string
9
+ - `data`: object
10
+ - `isRemovedFromDeckEntry`: boolean
11
+ - `isRemovedFromMilestoneEntry`: boolean
12
+ - `isRemovedFromSprintEntry`: boolean
13
+ - `createdAt`: Date (ISO string)
14
+ - `cardId`: string (foreign key ID) → card
15
+ - `deckId`: string (foreign key ID) → deck
16
+ - `projectId`: string (foreign key ID) → project
17
+ - `milestoneId`: string (foreign key ID) → milestone
18
+ - `sprintId`: string (foreign key ID) → sprint
19
+ - `changerId`: string (foreign key ID) → user
20
+
21
+ ## Relations
22
+
23
+ ### belongsTo
24
+
25
+ - `card` → [card](card.md) (via `cardId`)
26
+ - `deck` → [deck](deck.md) (via `deckId`)
27
+ - `project` → [project](project.md) (via `projectId`)
28
+ - `milestone` → [milestone](milestone.md) (via `milestoneId`)
29
+ - `sprint` → [sprint](sprint.md) (via `sprintId`)
30
+ - `changer` → [user](user.md) (via `changerId`)
@@ -0,0 +1,30 @@
1
+ # affiliateCode
2
+
3
+ Key: `id`
4
+
5
+ ## Fields
6
+
7
+ - `id`: string
8
+ - `code`: string
9
+ - `vanityUrl`: string
10
+ - `message`: string
11
+ - `label`: string
12
+ - `isDisabled`: string
13
+ - `isDeleted`: string
14
+ - `validUntil`: string
15
+ - `remainingRedemptions`: string
16
+ - `reward`: object
17
+ - `createdAt`: Date (ISO string)
18
+ - `accountId`: string (foreign key ID) → account
19
+ - `creatorId`: string (foreign key ID) → user
20
+
21
+ ## Relations
22
+
23
+ ### belongsTo
24
+
25
+ - `account` → [account](account.md) (via `accountId`)
26
+ - `creator` → [user](user.md) (via `creatorId`)
27
+
28
+ ### hasMany
29
+
30
+ - `stats` → [affiliateCodeStat](affiliateCodeStat.md)
@@ -0,0 +1,19 @@
1
+ # affiliateCodeStat
2
+
3
+ Key: `affiliateCodeId`, `month`
4
+
5
+ ## Fields
6
+
7
+ - `month`: number
8
+ - `year`: number
9
+ - `visits`: number
10
+ - `newVisitors`: number
11
+ - `signups`: number
12
+ - `revenue`: number
13
+ - `affiliateCodeId`: string (foreign key ID) → affiliateCode
14
+
15
+ ## Relations
16
+
17
+ ### belongsTo
18
+
19
+ - `affiliateCode` → [affiliateCode](affiliateCode.md) (via `affiliateCodeId`)
@@ -0,0 +1,10 @@
1
+ # app
2
+
3
+ Key: `id`
4
+
5
+ ## Fields
6
+
7
+ - `id`: string
8
+ - `name`: string
9
+ - `createdAt`: Date (ISO string)
10
+ - `payload`: object
@@ -0,0 +1,19 @@
1
+ # appInstallation
2
+
3
+ Key: `id`
4
+
5
+ ## Fields
6
+
7
+ - `id`: string
8
+ - `createdAt`: Date (ISO string)
9
+ - `accountId`: string (foreign key ID) → account
10
+ - `appId`: string (foreign key ID) → app
11
+ - `installerId`: string (foreign key ID) → user
12
+
13
+ ## Relations
14
+
15
+ ### belongsTo
16
+
17
+ - `account` → [account](account.md) (via `accountId`)
18
+ - `app` → [app](app.md) (via `appId`)
19
+ - `installer` → [user](user.md) (via `installerId`)
@@ -0,0 +1,18 @@
1
+ # assigneeAssignment
2
+
3
+ Key: `assigneeId`, `assignedById`
4
+
5
+ ## Fields
6
+
7
+ - `lastAssignedAt`: Date (ISO string)
8
+ - `accountId`: string (foreign key ID) → account
9
+ - `assigneeId`: string (foreign key ID) → user
10
+ - `assignedById`: string (foreign key ID) → user
11
+
12
+ ## Relations
13
+
14
+ ### belongsTo
15
+
16
+ - `account` → [account](account.md) (via `accountId`)
17
+ - `assignee` → [user](user.md) (via `assigneeId`)
18
+ - `assignedBy` → [user](user.md) (via `assignedById`)
@@ -0,0 +1,20 @@
1
+ # assigneeDeckAssignment
2
+
3
+ Key: `assigneeId`, `assignedById`, `deckId`
4
+
5
+ ## Fields
6
+
7
+ - `lastAssignedAt`: Date (ISO string)
8
+ - `accountId`: string (foreign key ID) → account
9
+ - `deckId`: string (foreign key ID) → deck
10
+ - `assigneeId`: string (foreign key ID) → user
11
+ - `assignedById`: string (foreign key ID) → user
12
+
13
+ ## Relations
14
+
15
+ ### belongsTo
16
+
17
+ - `account` → [account](account.md) (via `accountId`)
18
+ - `deck` → [deck](deck.md) (via `deckId`)
19
+ - `assignee` → [user](user.md) (via `assigneeId`)
20
+ - `assignedBy` → [user](user.md) (via `assignedById`)
@@ -0,0 +1,23 @@
1
+ # attachment
2
+
3
+ Key: `id`
4
+
5
+ ## Fields
6
+
7
+ - `id`: string
8
+ - `content`: string
9
+ - `title`: string
10
+ - `createdAt`: Date (ISO string)
11
+ - `fileId`: string (foreign key ID) → file
12
+ - `cardId`: string (foreign key ID) → card
13
+ - `accountId`: string (foreign key ID) → account
14
+ - `creatorId`: string (foreign key ID) → user
15
+
16
+ ## Relations
17
+
18
+ ### belongsTo
19
+
20
+ - `file` → [file](file.md) (via `fileId`)
21
+ - `card` → [card](card.md) (via `cardId`)
22
+ - `account` → [account](account.md) (via `accountId`)
23
+ - `creator` → [user](user.md) (via `creatorId`)
@@ -0,0 +1,20 @@
1
+ # autoFinishedTimeTrackingSegment
2
+
3
+ Key: `userId`, `accountId`
4
+
5
+ ## Fields
6
+
7
+ - `createdAt`: Date (ISO string)
8
+ - `userId`: string (foreign key ID) → user
9
+ - `accountId`: string (foreign key ID) → account
10
+ - `cardId`: string (foreign key ID) → card
11
+ - `timeTrackingSegmentId`: string (foreign key ID) → timeTrackingSegment
12
+
13
+ ## Relations
14
+
15
+ ### belongsTo
16
+
17
+ - `user` → [user](user.md) (via `userId`)
18
+ - `account` → [account](account.md) (via `accountId`)
19
+ - `card` → [card](card.md) (via `cardId`)
20
+ - `timeTrackingSegment` → [timeTrackingSegment](timeTrackingSegment.md) (via `timeTrackingSegmentId`)