Compare commits

...

5 Commits

Author SHA1 Message Date
032fa6b898 Merge pull request 'Add pastDueUsers, newPaidToday, and cohort paidTotal to usage stats' (#314) from dean/usage-stats-pastdue-alltime into master
Reviewed-on: #314
2026-08-01 02:42:49 +00:00
Dean Wenstrand
81565b7676 Add pastDueUsers, newPaidToday, and cohort paidTotal to usage stats
All checks were successful
Tests / Tests (pull_request) Successful in 4m48s
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-31 22:28:53 -04:00
d7b0b21430 Merge pull request 'Use BigInt for video export file sizes' (#310) from agent/video-export-bigint into master
Reviewed-on: #310
2026-07-27 19:35:17 +00:00
f173466b2f Merge pull request 'Add createShotShareLink for short share links' (#311) from dean/short-share-links-gql into master
Reviewed-on: #311
2026-07-27 19:35:11 +00:00
3e6dabe12a Use BigInt for video export file size
All checks were successful
Tests / Tests (pull_request) Successful in 6m3s
2026-07-24 20:09:19 -07:00
3 changed files with 44 additions and 19 deletions

View File

@@ -265,6 +265,7 @@ export type CohortStatsGql = {
activated7d: Scalars["Int"]["output"]; activated7d: Scalars["Int"]["output"];
activatedNotPaid7d: Scalars["Int"]["output"]; activatedNotPaid7d: Scalars["Int"]["output"];
paid7d: Scalars["Int"]["output"]; paid7d: Scalars["Int"]["output"];
paidTotal: Scalars["Int"]["output"];
signups: Scalars["Int"]["output"]; signups: Scalars["Int"]["output"];
weekStart: Scalars["Date"]["output"]; weekStart: Scalars["Date"]["output"];
}; };
@@ -2323,6 +2324,8 @@ export type FunnelStatsGql = {
freemiumEpoch: Scalars["Date"]["output"]; freemiumEpoch: Scalars["Date"]["output"];
newPaid7d: Scalars["Int"]["output"]; newPaid7d: Scalars["Int"]["output"];
newPaid30d: Scalars["Int"]["output"]; newPaid30d: Scalars["Int"]["output"];
newPaidToday: Scalars["Int"]["output"];
pastDueUsers: Scalars["Int"]["output"];
payingUsers: Scalars["Int"]["output"]; payingUsers: Scalars["Int"]["output"];
retentionPrevActive: Scalars["Int"]["output"]; retentionPrevActive: Scalars["Int"]["output"];
retentionReturned: Scalars["Int"]["output"]; retentionReturned: Scalars["Int"]["output"];
@@ -4318,7 +4321,7 @@ export type VideoExportJobGql = {
createdAt?: Maybe<Scalars["DateTime"]["output"]>; createdAt?: Maybe<Scalars["DateTime"]["output"]>;
downloadUrl?: Maybe<Scalars["String"]["output"]>; downloadUrl?: Maybe<Scalars["String"]["output"]>;
expiresAt?: Maybe<Scalars["DateTime"]["output"]>; expiresAt?: Maybe<Scalars["DateTime"]["output"]>;
fileSizeBytes?: Maybe<Scalars["Int"]["output"]>; fileSizeBytes?: Maybe<Scalars["BigInt"]["output"]>;
id: Scalars["Int"]["output"]; id: Scalars["Int"]["output"];
mode: VideoExportModeEnum; mode: VideoExportModeEnum;
runId?: Maybe<Scalars["Int"]["output"]>; runId?: Maybe<Scalars["Int"]["output"]>;
@@ -8155,6 +8158,8 @@ export type GetUsageStatsQuery = {
activationCohort: number; activationCohort: number;
activationActivated: number; activationActivated: number;
payingUsers: number; payingUsers: number;
pastDueUsers: number;
newPaidToday: number;
newPaid7d: number; newPaid7d: number;
newPaid30d: number; newPaid30d: number;
retentionPrevActive: number; retentionPrevActive: number;
@@ -8167,6 +8172,7 @@ export type GetUsageStatsQuery = {
activated7d: number; activated7d: number;
paid7d: number; paid7d: number;
activatedNotPaid7d: number; activatedNotPaid7d: number;
paidTotal: number;
}>; }>;
windows: Array<{ windows: Array<{
__typename?: "UsageStatsWindowGQL"; __typename?: "UsageStatsWindowGQL";
@@ -9281,7 +9287,7 @@ export type VideoExportJobFieldsFragment = {
shotIds?: Array<number> | null; shotIds?: Array<number> | null;
runId?: number | null; runId?: number | null;
downloadUrl?: string | null; downloadUrl?: string | null;
fileSizeBytes?: number | null; fileSizeBytes?: any | null;
expiresAt?: any | null; expiresAt?: any | null;
createdAt?: any | null; createdAt?: any | null;
}; };
@@ -9303,7 +9309,7 @@ export type RequestVideoExportMutation = {
shotIds?: Array<number> | null; shotIds?: Array<number> | null;
runId?: number | null; runId?: number | null;
downloadUrl?: string | null; downloadUrl?: string | null;
fileSizeBytes?: number | null; fileSizeBytes?: any | null;
expiresAt?: any | null; expiresAt?: any | null;
createdAt?: any | null; createdAt?: any | null;
}; };
@@ -9335,7 +9341,7 @@ export type VideoExportJobQuery = {
shotIds?: Array<number> | null; shotIds?: Array<number> | null;
runId?: number | null; runId?: number | null;
downloadUrl?: string | null; downloadUrl?: string | null;
fileSizeBytes?: number | null; fileSizeBytes?: any | null;
expiresAt?: any | null; expiresAt?: any | null;
createdAt?: any | null; createdAt?: any | null;
} | null; } | null;
@@ -9359,7 +9365,7 @@ export type MyVideoExportsQuery = {
shotIds?: Array<number> | null; shotIds?: Array<number> | null;
runId?: number | null; runId?: number | null;
downloadUrl?: string | null; downloadUrl?: string | null;
fileSizeBytes?: number | null; fileSizeBytes?: any | null;
expiresAt?: any | null; expiresAt?: any | null;
createdAt?: any | null; createdAt?: any | null;
}>; }>;
@@ -17254,6 +17260,8 @@ export const GetUsageStatsDocument = gql`
activationCohort activationCohort
activationActivated activationActivated
payingUsers payingUsers
pastDueUsers
newPaidToday
newPaid7d newPaid7d
newPaid30d newPaid30d
retentionPrevActive retentionPrevActive
@@ -17265,6 +17273,7 @@ export const GetUsageStatsDocument = gql`
activated7d activated7d
paid7d paid7d
activatedNotPaid7d activatedNotPaid7d
paidTotal
} }
totalUsers totalUsers
totalVideos totalVideos

View File

@@ -7,6 +7,8 @@ query getUsageStats($days: Int! = 30) {
activationCohort activationCohort
activationActivated activationActivated
payingUsers payingUsers
pastDueUsers
newPaidToday
newPaid7d newPaid7d
newPaid30d newPaid30d
retentionPrevActive retentionPrevActive
@@ -18,6 +20,7 @@ query getUsageStats($days: Int! = 30) {
activated7d activated7d
paid7d paid7d
activatedNotPaid7d activatedNotPaid7d
paidTotal
} }
totalUsers totalUsers
totalVideos totalVideos

View File

@@ -214,6 +214,7 @@ type CohortStatsGQL {
activated7d: Int! activated7d: Int!
paid7d: Int! paid7d: Int!
activatedNotPaid7d: Int! activatedNotPaid7d: Int!
paidTotal: Int!
} }
type CommentGQL { type CommentGQL {
@@ -264,6 +265,11 @@ input CreatePoolHallInput {
timezone: String = null timezone: String = null
} }
input CreateShotShareLinkInput {
shotIds: [Int!]!
paddingSeconds: Float = null
}
type CreateSubscriptionResultGQL { type CreateSubscriptionResultGQL {
checkoutUrl: String! checkoutUrl: String!
sessionId: String! sessionId: String!
@@ -464,6 +470,8 @@ type FunnelStatsGQL {
activationCohort: Int! activationCohort: Int!
activationActivated: Int! activationActivated: Int!
payingUsers: Int! payingUsers: Int!
pastDueUsers: Int!
newPaidToday: Int!
newPaid7d: Int! newPaid7d: Int!
newPaid30d: Int! newPaid30d: Int!
retentionPrevActive: Int! retentionPrevActive: Int!
@@ -536,19 +544,6 @@ type GetUploadLinksReturn {
stream: UploadStreamGQL stream: UploadStreamGQL
} }
type SegmentUploadLink {
segmentIndex: Int!
uploadUrl: String!
headers: [Header]!
}
type UploadLinkBatch {
links: [SegmentUploadLink!]!
alreadyUploaded: [Int!]!
}
union UploadLinkBatchGetUploadLinkErrors = UploadLinkBatch | GetUploadLinkErrors
type HLSPlaylistGQL { type HLSPlaylistGQL {
videoId: Int! videoId: Int!
m3u8Text: String! m3u8Text: String!
@@ -1314,6 +1309,12 @@ type SegmentAlreadyUploadedErr {
segmentId: Int! segmentId: Int!
} }
type SegmentUploadLink {
segmentIndex: Int!
uploadUrl: String!
headers: [Header]!
}
type SerializedShotPathsGQL { type SerializedShotPathsGQL {
b64EncodedBuffer: String b64EncodedBuffer: String
} }
@@ -1466,6 +1467,11 @@ enum SessionCoachStateEnum {
FAILED FAILED
} }
type ShareLinkGQL {
slug: String!
url: String!
}
type ShotAnnotationGQL { type ShotAnnotationGQL {
shotId: Int! shotId: Int!
type: ShotAnnotationTypeGQL! type: ShotAnnotationTypeGQL!
@@ -1800,6 +1806,13 @@ type UploadLink {
headers: [Header]! headers: [Header]!
} }
type UploadLinkBatch {
links: [SegmentUploadLink!]!
alreadyUploaded: [Int!]!
}
union UploadLinkBatchGetUploadLinkErrors = UploadLinkBatch | GetUploadLinkErrors
union UploadLinkGetProfileUploadLinkErrors = union UploadLinkGetProfileUploadLinkErrors =
UploadLink UploadLink
| GetProfileUploadLinkErrors | GetProfileUploadLinkErrors
@@ -1934,7 +1947,7 @@ type VideoExportJobGQL {
shotIds: [Int!] shotIds: [Int!]
runId: Int runId: Int
downloadUrl: String downloadUrl: String
fileSizeBytes: Int fileSizeBytes: BigInt
expiresAt: DateTime expiresAt: DateTime
createdAt: DateTime createdAt: DateTime
} }