@uptime.app/contracts 1.0.41-rc.1 → 1.0.41-rc.3
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.
- package/dist/cjs/flashcard/flashcard-events.d.ts +62 -0
- package/dist/cjs/flashcard/flashcard-events.d.ts.map +1 -0
- package/dist/cjs/flashcard/flashcard-events.js +3 -0
- package/dist/cjs/flashcard/flashcard-events.js.map +1 -0
- package/dist/cjs/flashcard/flashcard.d.ts +62 -0
- package/dist/cjs/flashcard/flashcard.d.ts.map +1 -0
- package/dist/cjs/flashcard/flashcard.js +15 -0
- package/dist/cjs/flashcard/flashcard.js.map +1 -0
- package/dist/cjs/history/history-events.d.ts +18 -0
- package/dist/cjs/history/history-events.d.ts.map +1 -0
- package/dist/cjs/history/history-events.js +3 -0
- package/dist/cjs/history/history-events.js.map +1 -0
- package/dist/cjs/history/history.d.ts +43 -0
- package/dist/cjs/history/history.d.ts.map +1 -0
- package/dist/cjs/history/history.js +3 -0
- package/dist/cjs/history/history.js.map +1 -0
- package/dist/cjs/index.d.ts +6 -0
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +6 -0
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/user-statistics/user-statistics-events.d.ts +82 -0
- package/dist/cjs/user-statistics/user-statistics-events.d.ts.map +1 -0
- package/dist/cjs/user-statistics/user-statistics-events.js +3 -0
- package/dist/cjs/user-statistics/user-statistics-events.js.map +1 -0
- package/dist/cjs/user-statistics/user-statistics.d.ts +75 -0
- package/dist/cjs/user-statistics/user-statistics.d.ts.map +1 -0
- package/dist/cjs/user-statistics/user-statistics.js +3 -0
- package/dist/cjs/user-statistics/user-statistics.js.map +1 -0
- package/dist/esm/flashcard/flashcard-events.d.ts +62 -0
- package/dist/esm/flashcard/flashcard-events.d.ts.map +1 -0
- package/dist/esm/flashcard/flashcard-events.js +2 -0
- package/dist/esm/flashcard/flashcard-events.js.map +1 -0
- package/dist/esm/flashcard/flashcard.d.ts +62 -0
- package/dist/esm/flashcard/flashcard.d.ts.map +1 -0
- package/dist/esm/flashcard/flashcard.js +12 -0
- package/dist/esm/flashcard/flashcard.js.map +1 -0
- package/dist/esm/history/history-events.d.ts +18 -0
- package/dist/esm/history/history-events.d.ts.map +1 -0
- package/dist/esm/history/history-events.js +2 -0
- package/dist/esm/history/history-events.js.map +1 -0
- package/dist/esm/history/history.d.ts +43 -0
- package/dist/esm/history/history.d.ts.map +1 -0
- package/dist/esm/history/history.js +2 -0
- package/dist/esm/history/history.js.map +1 -0
- package/dist/esm/index.d.ts +6 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +6 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/user-statistics/user-statistics-events.d.ts +82 -0
- package/dist/esm/user-statistics/user-statistics-events.d.ts.map +1 -0
- package/dist/esm/user-statistics/user-statistics-events.js +2 -0
- package/dist/esm/user-statistics/user-statistics-events.js.map +1 -0
- package/dist/esm/user-statistics/user-statistics.d.ts +75 -0
- package/dist/esm/user-statistics/user-statistics.d.ts.map +1 -0
- package/dist/esm/user-statistics/user-statistics.js +2 -0
- package/dist/esm/user-statistics/user-statistics.js.map +1 -0
- package/package.json +2 -2
- package/src/flashcard/flashcard-events.ts +85 -0
- package/src/flashcard/flashcard.ts +138 -0
- package/src/history/history-events.ts +21 -0
- package/src/history/history.ts +46 -0
- package/src/index.ts +9 -0
- package/src/user-statistics/user-statistics-events.ts +97 -0
- package/src/user-statistics/user-statistics.ts +82 -0
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { CardType, Hack, SegmentType, SupportedLocale, Theme } from '../index';
|
|
2
|
+
|
|
3
|
+
export interface Flashcard {
|
|
4
|
+
id: string;
|
|
5
|
+
v: number;
|
|
6
|
+
createdAt: string;
|
|
7
|
+
updatedAt: string;
|
|
8
|
+
userId: string;
|
|
9
|
+
hackId: string;
|
|
10
|
+
segmentId: string;
|
|
11
|
+
themeId: string;
|
|
12
|
+
|
|
13
|
+
// also shows up in the "card", but easier to create GSI from top level property
|
|
14
|
+
cardId: string;
|
|
15
|
+
card: FlashedTextCard;
|
|
16
|
+
|
|
17
|
+
/*
|
|
18
|
+
A flashcard can have multiple reasons for its existence
|
|
19
|
+
when all reasons go away (when spark is deleted and hack is made unavailable), the Flashcard is deleted
|
|
20
|
+
*/
|
|
21
|
+
reasonCreated: FlashcardCreationReason[];
|
|
22
|
+
|
|
23
|
+
/*
|
|
24
|
+
true when the user dismisses it
|
|
25
|
+
*/
|
|
26
|
+
isDismissed: boolean;
|
|
27
|
+
|
|
28
|
+
/*
|
|
29
|
+
Flashcards from sparks are considered more important than flashcards from consumed content and should be displayed first
|
|
30
|
+
*/
|
|
31
|
+
relevanceScore: number;
|
|
32
|
+
|
|
33
|
+
/*
|
|
34
|
+
Flashcards start at level 0 and are promoted to level 1+, or demoted back to level 0
|
|
35
|
+
*/
|
|
36
|
+
level: number;
|
|
37
|
+
|
|
38
|
+
/*
|
|
39
|
+
After a flashcard is demoted, flash cycle count increases
|
|
40
|
+
*/
|
|
41
|
+
flashCycle: number;
|
|
42
|
+
|
|
43
|
+
/*
|
|
44
|
+
How many times a user has seen this flashcard
|
|
45
|
+
*/
|
|
46
|
+
timesFlashed: number;
|
|
47
|
+
|
|
48
|
+
memorisationConfidence?: FlashcardMemorisationConfidence;
|
|
49
|
+
|
|
50
|
+
/*
|
|
51
|
+
ISO date in UTC which indicates when to flash this card to the user next.
|
|
52
|
+
When flashcard is dismissed, "nextDateToFlash" becomes "never"
|
|
53
|
+
*/
|
|
54
|
+
nextDateToFlash: string;
|
|
55
|
+
|
|
56
|
+
/*
|
|
57
|
+
Indicates whether the referenced hack is "available" (not hidden or deleted)
|
|
58
|
+
*/
|
|
59
|
+
hackIsAvailable: boolean;
|
|
60
|
+
|
|
61
|
+
/*
|
|
62
|
+
Indicates whether the user has memorised the flashcard. It's considered memorised when its level >= 8
|
|
63
|
+
*/
|
|
64
|
+
isMemorised: boolean;
|
|
65
|
+
|
|
66
|
+
/*
|
|
67
|
+
A hack with an enriched theme, so that the flashcard can be displayed when the hack becomes unavailable. This structure is consistent with Sparks.
|
|
68
|
+
*/
|
|
69
|
+
hack: Hack;
|
|
70
|
+
|
|
71
|
+
/*
|
|
72
|
+
A hack's ACL. The Hack model doesn't have an ACL, this is from the equivalent enriched hack.
|
|
73
|
+
*/
|
|
74
|
+
hackAcl: string[];
|
|
75
|
+
|
|
76
|
+
/*
|
|
77
|
+
A snapshot of the hack theme at the time the flashcard was created. This is consistent with Sparks also having a snapshot of the theme.
|
|
78
|
+
*/
|
|
79
|
+
theme: Theme;
|
|
80
|
+
|
|
81
|
+
/*
|
|
82
|
+
The hackId for the hack in its base locale. Consistent with the Spark model.
|
|
83
|
+
*/
|
|
84
|
+
baseLocaleHackId: string;
|
|
85
|
+
|
|
86
|
+
/*
|
|
87
|
+
The locale of the hack at the time this flashcard was created. Consistent with the Spark model.
|
|
88
|
+
*/
|
|
89
|
+
locale: SupportedLocale;
|
|
90
|
+
|
|
91
|
+
/*
|
|
92
|
+
The language of the hack at the time this flashcard was created. Consistent with the Spark model.
|
|
93
|
+
*/
|
|
94
|
+
language: string;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
export interface FlashedTextCard {
|
|
98
|
+
id: string;
|
|
99
|
+
markdown: string;
|
|
100
|
+
segmentType: SegmentType;
|
|
101
|
+
isTitle?: boolean;
|
|
102
|
+
cardType?: CardType;
|
|
103
|
+
keyPhrases: KeyPhrase[];
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
export type FlashcardCreationReason = FlashcardCreationSparkReason | FlashcardCreationInsightConsumedReason;
|
|
107
|
+
|
|
108
|
+
export interface FlashcardCreationSparkReason {
|
|
109
|
+
type: FlashcardCreationReasonType.SparkCreated;
|
|
110
|
+
sparkId: string;
|
|
111
|
+
// ISO date
|
|
112
|
+
dateSparkCreated: string;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
export interface FlashcardCreationInsightConsumedReason {
|
|
116
|
+
type: FlashcardCreationReasonType.InsightConsumed;
|
|
117
|
+
// this helps figure out if the insight was already turned into a flashcard. Using the cardId is insufficient because the cardId can change if the markdown of the hack changes.
|
|
118
|
+
// supported insight numbers: 1, 2, 3
|
|
119
|
+
insightNumber: number;
|
|
120
|
+
// ISO date
|
|
121
|
+
dateHackLastViewed: string;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
export enum FlashcardCreationReasonType {
|
|
125
|
+
SparkCreated = 'SparkCreated',
|
|
126
|
+
InsightConsumed = 'InsightConsumed'
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
export enum FlashcardMemorisationConfidence {
|
|
130
|
+
Green = 'Green',
|
|
131
|
+
Amber = 'Amber',
|
|
132
|
+
Red = 'Red'
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
export interface KeyPhrase {
|
|
136
|
+
phrase: string;
|
|
137
|
+
score: number;
|
|
138
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { HackProgress } from './history';
|
|
2
|
+
|
|
3
|
+
export interface HackProgressCreatedEvent {
|
|
4
|
+
id: string;
|
|
5
|
+
type: 'HackProgressCreated';
|
|
6
|
+
payload: HackProgress;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export interface HackProgressUpdatedEvent {
|
|
10
|
+
id: string;
|
|
11
|
+
type: 'HackProgressUpdated';
|
|
12
|
+
payload: HackProgress;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export interface HackProgressDeletedEvent {
|
|
16
|
+
id: string;
|
|
17
|
+
type: 'HackProgressDeleted';
|
|
18
|
+
payload: HackProgress;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export type HackProgressChangedEvent = HackProgressCreatedEvent | HackProgressUpdatedEvent | HackProgressDeletedEvent;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
export interface ResumeStoryPlayer {
|
|
2
|
+
/** the format the user chose to consume the hack */
|
|
3
|
+
format: 'story';
|
|
4
|
+
/** where to resume from in the segment's array of cards */
|
|
5
|
+
fromCardIndex: number;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export interface ResumeAudioPlayer {
|
|
9
|
+
/** the format the user chose to consume the hack */
|
|
10
|
+
format: 'audio';
|
|
11
|
+
/** the timestamp in seconds that the audio player should resume from */
|
|
12
|
+
audioPlayerFromTimestamp: number;
|
|
13
|
+
/** where to resume from in the segment's array of cards */
|
|
14
|
+
fromCardIndex?: number;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export interface ResumeTextReader {
|
|
18
|
+
/** the format the user chose to consume the hack */
|
|
19
|
+
format: 'text';
|
|
20
|
+
/** the timestamp in seconds that the audio player should resume from
|
|
21
|
+
* if the user had audio playing in the background while reading */
|
|
22
|
+
audioPlayerFromTimestamp?: number;
|
|
23
|
+
/** where to resume from in the segment's array of cards */
|
|
24
|
+
fromCardIndex?: number;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export interface HackProgressDTO {
|
|
28
|
+
/** the hack the user has been viewing */
|
|
29
|
+
hackId: string;
|
|
30
|
+
/** the segment to resume from */
|
|
31
|
+
segmentId: string;
|
|
32
|
+
/** the ISO 8601 date and time when the user last viewed the hack */
|
|
33
|
+
lastViewedAt: string;
|
|
34
|
+
/** used to render the hack progress bar on the client */
|
|
35
|
+
percentageComplete: number;
|
|
36
|
+
/** the format the hack will be resumed in */
|
|
37
|
+
resume: ResumeStoryPlayer | ResumeAudioPlayer | ResumeTextReader;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export interface HackProgress extends HackProgressDTO {
|
|
41
|
+
id: string
|
|
42
|
+
createdAt: string;
|
|
43
|
+
updatedAt: string;
|
|
44
|
+
v: number;
|
|
45
|
+
userId: string;
|
|
46
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -46,6 +46,9 @@ export * from './entitlement/user-entitlements';
|
|
|
46
46
|
export * from './entitlement/user-entitlements-events';
|
|
47
47
|
export * from './entitlement/user-entitlements-commands';
|
|
48
48
|
|
|
49
|
+
export * from './flashcard/flashcard';
|
|
50
|
+
export * from './flashcard/flashcard-events';
|
|
51
|
+
|
|
49
52
|
export * from './hack/extracted-subject';
|
|
50
53
|
export * from './hack/hack-events';
|
|
51
54
|
export * from './hack/hack-published';
|
|
@@ -60,6 +63,9 @@ export * from './hack-metadata/hack-metadata-events';
|
|
|
60
63
|
export * from './hack-of-the-day/hack-of-the-day';
|
|
61
64
|
export * from './hack-of-the-day/hack-of-the-day-events';
|
|
62
65
|
|
|
66
|
+
export * from './history/history';
|
|
67
|
+
export * from './history/history-events';
|
|
68
|
+
|
|
63
69
|
export * from './knowledge-source/knowledge-source';
|
|
64
70
|
export * from './knowledge-source/knowledge-source-events';
|
|
65
71
|
|
|
@@ -126,3 +132,6 @@ export * from './user-context/user-context-events';
|
|
|
126
132
|
|
|
127
133
|
export * from './user-notification-context/user-notification-context';
|
|
128
134
|
export * from './user-notification-context/user-notification-context-events';
|
|
135
|
+
|
|
136
|
+
export * from './user-statistics/user-statistics';
|
|
137
|
+
export * from './user-statistics/user-statistics-events';
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { DailyInsightCompleted, StreakRepair, UserHackStatistics, UserInsightStreak, ViewedHack } from './user-statistics';
|
|
2
|
+
|
|
3
|
+
export interface DailyInsightCompletedCreatedEvent {
|
|
4
|
+
id: string;
|
|
5
|
+
type: 'DailyInsightCompletedCreated';
|
|
6
|
+
payload: DailyInsightCompleted;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export interface DailyInsightCompletedUpdatedEvent {
|
|
10
|
+
id: string;
|
|
11
|
+
type: 'DailyInsightCompletedUpdated';
|
|
12
|
+
payload: DailyInsightCompleted;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export interface DailyInsightCompletedDeletedEvent {
|
|
16
|
+
id: string;
|
|
17
|
+
type: 'DailyInsightCompletedDeleted';
|
|
18
|
+
payload: DailyInsightCompleted;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export interface StreakRepairCreatedEvent {
|
|
22
|
+
id: string;
|
|
23
|
+
type: 'StreakRepairCreated';
|
|
24
|
+
payload: StreakRepair;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export interface StreakRepairUpdatedEvent {
|
|
28
|
+
id: string;
|
|
29
|
+
type: 'StreakRepairUpdated';
|
|
30
|
+
payload: StreakRepair;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export interface StreakRepairDeletedEvent {
|
|
34
|
+
id: string;
|
|
35
|
+
type: 'StreakRepairDeleted';
|
|
36
|
+
payload: StreakRepair;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export interface UserHackStatisticsCreatedEvent {
|
|
40
|
+
id: string;
|
|
41
|
+
type: 'UserHackStatisticsCreated';
|
|
42
|
+
payload: UserHackStatistics;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export interface UserHackStatisticsUpdatedEvent {
|
|
46
|
+
id: string;
|
|
47
|
+
type: 'UserHackStatisticsUpdated';
|
|
48
|
+
payload: UserHackStatistics;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export interface UserHackStatisticsDeletedEvent {
|
|
52
|
+
id: string;
|
|
53
|
+
type: 'UserHackStatisticsDeleted';
|
|
54
|
+
payload: UserHackStatistics;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export interface UserInsightStreakCreatedEvent {
|
|
58
|
+
id: string;
|
|
59
|
+
type: 'UserInsightStreakCreated';
|
|
60
|
+
payload: UserInsightStreak;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export interface UserInsightStreakUpdatedEvent {
|
|
64
|
+
id: string;
|
|
65
|
+
type: 'UserInsightStreakUpdated';
|
|
66
|
+
payload: UserInsightStreak;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
export interface UserInsightStreakDeletedEvent {
|
|
70
|
+
id: string;
|
|
71
|
+
type: 'UserInsightStreakDeleted';
|
|
72
|
+
payload: UserInsightStreak;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
export interface ViewedHackCreatedEvent {
|
|
76
|
+
id: string;
|
|
77
|
+
type: 'ViewedHackCreated';
|
|
78
|
+
payload: ViewedHack;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
export interface ViewedHackUpdatedEvent {
|
|
82
|
+
id: string;
|
|
83
|
+
type: 'ViewedHackUpdated';
|
|
84
|
+
payload: ViewedHack;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
export interface ViewedHackDeletedEvent {
|
|
88
|
+
id: string;
|
|
89
|
+
type: 'ViewedHackDeleted';
|
|
90
|
+
payload: ViewedHack;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
export type DailyInsightCompletedChangedEvent = DailyInsightCompletedCreatedEvent | DailyInsightCompletedUpdatedEvent | DailyInsightCompletedDeletedEvent;
|
|
94
|
+
export type StreakRepairChangedEvent = StreakRepairCreatedEvent | StreakRepairUpdatedEvent | StreakRepairDeletedEvent;
|
|
95
|
+
export type UserHackStatisticsChangedEvent = UserHackStatisticsCreatedEvent | UserHackStatisticsUpdatedEvent | UserHackStatisticsDeletedEvent;
|
|
96
|
+
export type UserInsightStreakChangedEvent = UserInsightStreakCreatedEvent | UserInsightStreakUpdatedEvent | UserInsightStreakDeletedEvent;
|
|
97
|
+
export type ViewedHackChangedEvent = ViewedHackCreatedEvent | ViewedHackUpdatedEvent | ViewedHackDeletedEvent;
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
export interface ViewedHack {
|
|
2
|
+
id: string;
|
|
3
|
+
v: number;
|
|
4
|
+
createdAt: string;
|
|
5
|
+
updatedAt: string;
|
|
6
|
+
userId: string;
|
|
7
|
+
hackId: string;
|
|
8
|
+
isHackCompleted: boolean;
|
|
9
|
+
insightsCompletedCount: number;
|
|
10
|
+
/** added Aug 2023 */
|
|
11
|
+
percentageComplete: number;
|
|
12
|
+
/** added Aug 2023 */
|
|
13
|
+
lastViewedAt: string;
|
|
14
|
+
hackProgress: {
|
|
15
|
+
id: string;
|
|
16
|
+
version: number;
|
|
17
|
+
createdAt: string;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export interface UserInsightStreak {
|
|
22
|
+
userId: string;
|
|
23
|
+
v: number;
|
|
24
|
+
id: string; // deterministic from userId
|
|
25
|
+
createdAt: string;
|
|
26
|
+
updatedAt: string;
|
|
27
|
+
longestStreak: {
|
|
28
|
+
length: number;
|
|
29
|
+
},
|
|
30
|
+
latestStreak: {
|
|
31
|
+
// date with format YYYY-MM-DD
|
|
32
|
+
latestDayCompleted: string;
|
|
33
|
+
length: number;
|
|
34
|
+
},
|
|
35
|
+
previousStreak: {
|
|
36
|
+
length: number;
|
|
37
|
+
},
|
|
38
|
+
// 30 dates with format YYYY-MM-DD
|
|
39
|
+
latestDaysCompleted: string[];
|
|
40
|
+
repairs?: {
|
|
41
|
+
usedThisMonthCount: number;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export interface UserHackStatistics {
|
|
46
|
+
userId: string;
|
|
47
|
+
v: number;
|
|
48
|
+
createdAt: string;
|
|
49
|
+
updatedAt: string;
|
|
50
|
+
|
|
51
|
+
id: string; // deterministic from userId
|
|
52
|
+
insightsCompletedCount: number;
|
|
53
|
+
hacksCompletedCount: number;
|
|
54
|
+
/** Time saved in minutes. Added Aug 2023 */
|
|
55
|
+
totalTimeSaved: number;
|
|
56
|
+
perTopic?: PerTopicStatistics[]
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export interface PerTopicStatistics {
|
|
60
|
+
name: string;
|
|
61
|
+
insightsCompletedCount: number;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export interface StreakRepair {
|
|
65
|
+
id: string;
|
|
66
|
+
v: number;
|
|
67
|
+
createdAt: string;
|
|
68
|
+
updatedAt: string;
|
|
69
|
+
userId: string;
|
|
70
|
+
repairDate_streakType : string;
|
|
71
|
+
repairDate: string;
|
|
72
|
+
streakType: string;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
export interface DailyInsightCompleted {
|
|
76
|
+
id: string;
|
|
77
|
+
v: number;
|
|
78
|
+
createdAt: string;
|
|
79
|
+
updatedAt: string;
|
|
80
|
+
userId: string;
|
|
81
|
+
dateInsightCompleted: string;
|
|
82
|
+
}
|