Compare commits

..

1 Commits

Author SHA1 Message Date
b5a8e3eca7 add reaction count schema 2025-08-04 12:36:13 -07:00
12 changed files with 482 additions and 8932 deletions

5423
package-lock.json generated

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,207 +0,0 @@
query GetChallenges {
challenges {
id
name
description
minimumShots
startDate
endDate
createdAt
updatedAt
requiredTableSize
requiredPocketSize
isPublic
maxAttempts
ruleSet {
id
name
description
}
createdBy {
id
username
profileImageUri
}
}
}
query GetChallenge($id: ID!) {
challenge(id: $id) {
id
name
description
minimumShots
startDate
endDate
createdAt
updatedAt
requiredTableSize
requiredPocketSize
isPublic
maxAttempts
ruleSet {
id
name
description
}
createdBy {
id
username
profileImageUri
}
}
}
query GetRuleSets {
ruleSets {
id
name
description
}
}
query GetChallengeLeaderboard($challengeId: ID!, $limit: Int) {
challengeLeaderboard(challengeId: $challengeId, limit: $limit) {
id
status
shotsCount
makesCount
makeRate
qualified
createdAt
user {
id
username
profileImageUri
}
video {
id
createdAt
}
}
}
query GetMyChallengeInvitations {
myChallengeInvitations {
id
status
createdAt
challenge {
id
name
description
startDate
endDate
createdBy {
id
username
profileImageUri
}
}
inviter {
id
username
profileImageUri
}
}
}
mutation CreateRuleSet($name: String!, $description: String) {
createRuleSet(name: $name, description: $description) {
id
name
description
}
}
mutation CreateChallenge(
$name: String!
$ruleSetId: ID!
$minimumShots: Int!
$startDate: DateTime!
$endDate: DateTime!
$description: String
$requiredTableSize: Float
$requiredPocketSize: Float
$isPublic: Boolean! = false
$maxAttempts: Int
) {
createChallenge(
name: $name
ruleSetId: $ruleSetId
minimumShots: $minimumShots
startDate: $startDate
endDate: $endDate
description: $description
requiredTableSize: $requiredTableSize
requiredPocketSize: $requiredPocketSize
isPublic: $isPublic
maxAttempts: $maxAttempts
) {
id
name
description
requiredTableSize
requiredPocketSize
isPublic
maxAttempts
}
}
mutation InviteUsersToChallenge($challengeId: ID!, $userIds: [ID!]!) {
inviteUsersToChallenge(challengeId: $challengeId, userIds: $userIds) {
id
status
inviter {
id
username
}
}
}
mutation RespondToChallengeInvitation($invitationId: ID!, $accept: Boolean!) {
respondToChallengeInvitation(invitationId: $invitationId, accept: $accept) {
id
status
challenge {
id
}
}
}
mutation StartChallenge($challengeId: ID!) {
startChallenge(challengeId: $challengeId) {
id
status
createdAt
challenge {
id
name
}
}
}
mutation SubmitChallengeEntry($entryId: ID!, $videoId: ID!) {
submitChallengeEntry(entryId: $entryId, videoId: $videoId) {
id
status
qualified
makeRate
shotsCount
makesCount
video {
id
}
}
}
mutation RecalculateChallengeEntry($entryId: ID!) {
recalculateChallengeEntry(entryId: $entryId) {
id
status
qualified
makeRate
shotsCount
makesCount
}
}

View File

@@ -5,7 +5,6 @@ query getDeployedConfig {
environment
firebase
minimumAllowedAppVersion
subscriptionGatingEnabled
bannerMessages {
color
dismissible

View File

@@ -1,15 +0,0 @@
mutation blockContent($videoId: Int!) {
blockContent(videoId: $videoId)
}
mutation blockUser($userId: Int!) {
blockUser(userId: $userId)
}
mutation reportContent(
$videoId: Int!
$reason: ReportReasonEnum!
$customReason: String = null
) {
reportContent(videoId: $videoId, reason: $reason, customReason: $customReason)
}

View File

@@ -1,58 +0,0 @@
query GetNotifications(
$limit: Int! = 20
$offset: Int! = 0
$filters: NotificationFilters = null
) {
notifications(limit: $limit, offset: $offset, filters: $filters) {
notifications {
...Notification
}
totalCount
unreadCount
hasMore
}
}
query GetUnreadNotificationCount {
unreadNotificationCount
}
mutation MarkNotificationAsRead($notificationId: Int!) {
markNotificationAsRead(notificationId: $notificationId)
}
mutation MarkNotificationsAsRead($notificationIds: [Int!]!) {
markNotificationsAsRead(notificationIds: $notificationIds)
}
mutation MarkAllNotificationsAsRead {
markAllNotificationsAsRead
}
mutation DeleteNotification($notificationId: Int!) {
deleteNotification(notificationId: $notificationId)
}
fragment Notification on NotificationGQL {
id
notificationType
actor {
id
username
profileImageUri
}
videoId
comment {
id
message
user {
id
username
profileImageUri
}
}
reactionType
isRead
createdAt
readAt
}

View File

@@ -12,54 +12,3 @@ mutation EnsureStripeCustomerExists {
updatedAt
}
}
mutation CreateSubscription($priceId: String!) {
createSubscription(priceId: $priceId) {
checkoutUrl
sessionId
}
}
query GetAvailableSubscriptionOptions {
getAvailableSubscriptionOptions {
products {
id
name
description
active
prices {
id
currency
unitAmount
recurringInterval
recurringIntervalCount
type
active
}
}
}
}
query GetSubscriptionStatus {
getUserSubscriptionStatus {
hasActiveSubscription
subscriptionStatus
currentPeriodStart
currentPeriodEnd
validUntil
stripePriceId
stripeSubscriptionId
}
}
mutation CancelSubscription {
cancelSubscription {
hasActiveSubscription
subscriptionStatus
currentPeriodStart
currentPeriodEnd
validUntil
stripePriceId
stripeSubscriptionId
}
}

View File

@@ -191,9 +191,6 @@ fragment ShotWithAllFeatures on ShotGQL {
id
streamSegmentType
}
playlist {
segmentDurations
}
}
}

View File

@@ -140,14 +140,12 @@ mutation editUser(
$username: String
$fargoRating: Int
$videosPrivateByDefault: Boolean
$agreesToMarketing: Boolean
) {
editUser(
input: {
username: $username
fargoRating: $fargoRating
videosPrivateByDefault: $videosPrivateByDefault
agreesToMarketing: $agreesToMarketing
}
) {
id
@@ -156,7 +154,6 @@ mutation editUser(
fargoRating
updatedAt
videosPrivateByDefault
agreesToMarketing
}
}
@@ -175,15 +172,4 @@ fragment UserFragment on UserGQL {
createdAt
updatedAt
videosPrivateByDefault
agreesToMarketing
}
query GetUsersMatching(
$matchString: String = null
$limit: Int = null
$after: String = null
) {
getUsersMatching(matchString: $matchString, limit: $limit, after: $after) {
...UserFragment
}
}

View File

@@ -36,7 +36,6 @@ query GetVideoUpdatePageDetails($videoId: Int!) {
makePercentage
elapsedTime
tableSize
pocketSize
private
tags {
tagClasses {
@@ -67,7 +66,6 @@ query GetVideoDetails($videoId: Int!) {
createdAt
updatedAt
tableSize
pocketSize
private
owner {
id
@@ -99,9 +97,6 @@ query GetVideoSocialDetailsById($videoId: Int!) {
getVideo(videoId: $videoId) {
id
name
screenshotUri
makePercentage
totalShots
owner {
id
firebaseUid

View File

@@ -3,12 +3,6 @@ type Query {
aggregateInput: AggregateInputGQL!
): [AggregateResultGQL!]!
getBucketSet(keyName: String!): BucketSetGQL
challenges: [Challenge!]!
challenge(id: ID!): Challenge
challengeLeaderboard(challengeId: ID!, limit: Int! = 50): [ChallengeEntry!]!
myChallengeInvitations: [ChallengeInvitation!]!
ruleSets: [RuleSet!]!
myChallengeEntries: [ChallengeEntry!]!
getDeployedConfig: DeployedConfigGQL!
waitFor(duration: Float!): Float!
getFeedVideos(
@@ -34,12 +28,6 @@ type Query {
when: DateTime = null
): CountLeaderboardGQL!
getMedals(scope: MedalScope!, userId: Int = null): RequestedMedalsGQL!
notifications(
limit: Int! = 20
offset: Int! = 0
filters: NotificationFilters = null
): NotificationConnection!
unreadNotificationCount: Int!
getRuns(
filterInput: RunFilterInput!
runIds: [Int!] = null
@@ -94,7 +82,6 @@ type Query {
after: String = null
): UserRelationshipsResult!
getAvailableSubscriptionOptions: StripeSubscriptionOptionsGQL!
getUserSubscriptionStatus: UserSubscriptionStatusGQL!
getPlayTime(userId: Int!, filters: VideoFilterInput = null): UserPlayTimeGQL!
getUserVideos(
userId: Int = null
@@ -304,60 +291,33 @@ type BucketGQL {
lowerBound: Float!
}
type Challenge {
id: ID!
name: String!
description: String
minimumShots: Int!
requiredTableSize: Float
requiredPocketSize: Float
isPublic: Boolean!
maxAttempts: Int
startDate: DateTime!
endDate: DateTime!
createdAt: DateTime!
updatedAt: DateTime!
ruleSet: RuleSet!
createdBy: UserGQL!
type DeployedConfigGQL {
allowNewUsers: Boolean!
firebase: Boolean!
devMode: Boolean!
environment: String!
minimumAllowedAppVersion: String!
bannerMessages: [BannerGQL!]!
}
type RuleSet {
id: ID!
name: String!
description: String
createdAt: DateTime!
updatedAt: DateTime!
}
type UserGQL {
type BannerGQL {
id: Int!
firebaseUid: String
username: String!
isAdmin: Boolean
fargoRating: Int
activeVideoId: Int
stripeCustomerId: String
profileImageUri: String
createdAt: DateTime
updatedAt: DateTime
videosPrivateByDefault: Boolean
agreesToMarketing: Boolean
following: [UserGQL!]
followers: [UserGQL!]
isFollowedByCurrentUser: Boolean
message: String!
color: String!
kind: BannerKindEnum!
dismissible: Boolean!
priority: Int!
}
type ChallengeEntry {
id: ID!
status: String!
shotsCount: Int
makesCount: Int
makeRate: Float
qualified: Boolean
createdAt: DateTime!
challenge: Challenge!
video: VideoGQL
user: UserGQL!
enum BannerKindEnum {
INFO
WARNING
ERROR
}
type VideoHistoryGQL {
videos: [VideoGQL!]!
pageInfo: PageInfoGQL!
}
type VideoGQL {
@@ -379,7 +339,6 @@ type VideoGQL {
elapsedTime: Float
framesPerSecond: Float!
tableSize: Float!
pocketSize: Float
private: Boolean!
stream: UploadStreamGQL
playlist: HLSPlaylistGQL
@@ -391,6 +350,22 @@ type VideoGQL {
comments: [CommentGQL!]!
}
type UserGQL {
id: Int!
firebaseUid: String
username: String!
isAdmin: Boolean
fargoRating: Int
activeVideoId: Int
stripeCustomerId: String
profileImageUri: String
createdAt: DateTime
updatedAt: DateTime
videosPrivateByDefault: Boolean
following: [UserGQL!]
followers: [UserGQL!]
}
type ShotGQL {
id: Int!
videoId: Int!
@@ -646,45 +621,6 @@ type CommentGQL {
replies: [CommentGQL!]!
}
type ChallengeInvitation {
id: ID!
status: String!
createdAt: DateTime!
challenge: Challenge!
inviter: UserGQL!
}
type DeployedConfigGQL {
allowNewUsers: Boolean!
firebase: Boolean!
devMode: Boolean!
environment: String!
minimumAllowedAppVersion: String!
subscriptionGatingEnabled: Boolean!
bannerMessages: [BannerGQL!]!
}
type BannerGQL {
id: Int!
message: String!
color: String!
kind: BannerKindEnum!
dismissible: Boolean!
priority: Int!
}
enum BannerKindEnum {
INFO
WARNING
ERROR
}
type VideoHistoryGQL {
videos: [VideoGQL!]!
pageInfo: PageInfoGQL!
hasFollowing: Boolean!
}
type PageInfoGQL {
hasNextPage: Boolean!
endCursor: String
@@ -701,13 +637,22 @@ input VideoFilterInput {
requireCursorCompletion: Boolean! = true
createdAt: DateRangeFilter = null
excludeVideosWithNoShots: Boolean = null
reactionCount: IntRangeFilter = null
}
input IntRangeFilter {
lessThan: Int = null
greaterThanEqualTo: Int = null
greaterThan: Int = null
includeOnNone: Boolean! = false
lessThanInclusive: Boolean! = false
greaterThanInclusive: Boolean! = true
}
input VideoFeedInputGQL @oneOf {
followedByUserId: Int
userId: Int
allUsers: Boolean
home: Boolean
}
type MakePercentageIntervalGQL {
@@ -776,37 +721,6 @@ input MedalScope @oneOf {
datetimeRange: DatetimeRangeAggregationInput
}
type NotificationConnection {
notifications: [NotificationGQL!]!
totalCount: Int!
unreadCount: Int!
hasMore: Boolean!
}
type NotificationGQL {
id: Int!
notificationType: NotificationTypeEnum!
actor: UserGQL!
videoId: Int
comment: CommentGQL
reactionType: String
isRead: Boolean!
createdAt: DateTime!
readAt: DateTime
}
enum NotificationTypeEnum {
COMMENT
COMMENT_REPLY
REACTION
FOLLOW
}
input NotificationFilters {
isRead: Boolean = null
notificationTypes: [NotificationTypeEnum!] = null
}
type GetRunsResult {
runs: [RunGQL!]!
count: Int
@@ -945,27 +859,6 @@ type StripePriceGQL {
active: Boolean!
}
type UserSubscriptionStatusGQL {
hasActiveSubscription: Boolean!
subscriptionStatus: StripeSubscriptionStatusEnum
currentPeriodStart: DateTime
currentPeriodEnd: DateTime
validUntil: DateTime
stripePriceId: String
stripeSubscriptionId: String
}
enum StripeSubscriptionStatusEnum {
INCOMPLETE
INCOMPLETE_EXPIRED
TRIALING
ACTIVE
PAST_DUE
CANCELED
UNPAID
PAUSED
}
type UserPlayTimeGQL {
totalSeconds: Float!
}
@@ -992,30 +885,6 @@ scalar JSON
type Mutation {
createBucketSet(params: CreateBucketSetInput!): BucketSetGQL!
createRuleSet(name: String!, description: String = null): RuleSet!
createChallenge(
name: String!
ruleSetId: ID!
minimumShots: Int!
startDate: DateTime!
endDate: DateTime!
description: String = null
requiredTableSize: Float = null
requiredPocketSize: Float = null
isPublic: Boolean! = false
maxAttempts: Int = null
): Challenge!
inviteUsersToChallenge(
challengeId: ID!
userIds: [ID!]!
): [ChallengeInvitation!]!
respondToChallengeInvitation(
invitationId: ID!
accept: Boolean!
): ChallengeInvitation!
startChallenge(challengeId: ID!): ChallengeEntry!
recalculateChallengeEntry(entryId: ID!): ChallengeEntry!
submitChallengeEntry(entryId: ID!, videoId: ID!): ChallengeEntry!
setLoggerLevel(path: String!, level: String!): Boolean!
reactToVideo(videoId: Int!, reaction: ReactionEnum): Boolean!
commentOnVideo(
@@ -1025,17 +894,6 @@ type Mutation {
): Boolean!
editComment(videoId: Int!, commentId: Int!, newMessage: String!): Boolean!
deleteComment(videoId: Int!, commentId: Int!): Boolean!
blockContent(videoId: Int!): Boolean!
blockUser(userId: Int!): Boolean!
reportContent(
videoId: Int!
reason: ReportReasonEnum!
customReason: String = null
): Boolean!
markNotificationAsRead(notificationId: Int!): Boolean!
markAllNotificationsAsRead: Boolean!
markNotificationsAsRead(notificationIds: [Int!]!): Boolean!
deleteNotification(notificationId: Int!): Boolean!
addAnnotationToShot(
shotId: Int!
annotationName: String!
@@ -1060,7 +918,6 @@ type Mutation {
ensureStripeCustomerExists: UserGQL!
deleteUser: Boolean!
createSubscription(priceId: String!): CreateSubscriptionResultGQL!
cancelSubscription: UserSubscriptionStatusGQL!
findPrerecordTableLayout(b64Image: String!, videoId: Int!): HomographyInfoGQL
createUploadStream(
videoMetadata: VideoMetadataInput!
@@ -1083,15 +940,6 @@ input CreateBucketSetInput {
buckets: [BucketInputGQL!]!
}
enum ReportReasonEnum {
SPAM
NUDITY
VIOLENCE
HATE
COPYRIGHT
OTHER
}
type AddShotAnnotationReturn {
value: SuccessfulAddAddShotAnnotationErrors!
}
@@ -1177,7 +1025,6 @@ input EditUserInputGQL {
username: String = null
fargoRating: Int = null
videosPrivateByDefault: Boolean = null
agreesToMarketing: Boolean = null
}
type CreateSubscriptionResultGQL {
@@ -1201,7 +1048,6 @@ input VideoMetadataInput {
"""
tags: [VideoTagInput!] = null
tableSize: Float = null
pocketSize: Float = null
lastIntendedSegmentBound: Int = null
streamSegmentType: StreamSegmentTypeEnum = null
private: Boolean = null

848
yarn.lock

File diff suppressed because it is too large Load Diff