Compare commits

..

9 Commits

Author SHA1 Message Date
dean
55bbf723ba feat: Add challenge dismissal GQL operations
All checks were successful
Tests / Tests (pull_request) Successful in 10s
- Add DismissChallenge/UndismissChallenge mutations
- Add IsChallengeDismissed query
- Add GetMyDismissedChallenges query
- Update schema with dismissal fields

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-25 14:03:53 -08:00
dean
88650706e0 fix: Restore isFollowedByCurrentUser in UserSocialsFields fragment
All checks were successful
Tests / Tests (pull_request) Successful in 10s
Accidentally reverted to old followers array approach when creating
challenges branch. This restores the fix from PR #1474 that uses
isFollowedByCurrentUser field directly for proper follow state display.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-25 10:47:55 -08:00
dean
8a393e9a42 feat: Add challenge invitations fields and fix feed hasFollowing query
All checks were successful
Tests / Tests (pull_request) Successful in 10s
- Add invitations query fields with invitee data to GetChallenge
- Add participantCount field to GetChallenge
- Add GetMyChallengeEntries query (was missing)
- Add hasFollowing to GetVideoFeed response (fixes feed ordering)
- Sync schema with backend challenge types

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-25 10:39:46 -08:00
dean
a00b50d985 chore: Regenerate GraphQL TypeScript types
All checks were successful
Tests / Tests (pull_request) Successful in 9s
Regenerate gql/src/index.tsx to match current schema and fix
codegen hash mismatch in CI.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-21 12:31:50 -08:00
dean
36ed501cd9 Add GraphQL queries and mutations for challenge feature
Some checks failed
Tests / Tests (pull_request) Failing after 10s
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-21 12:00:17 -08:00
dean
d17c1a2ecc chore: regenerate schema and types
Some checks failed
Tests / Tests (pull_request) Failing after 10s
2025-11-21 10:19:15 -08:00
dean
cc9bc98b32 merge: sync gql submodule, keeping local notification fragment
All checks were successful
Tests / Tests (pull_request) Successful in 11s
2025-11-20 12:57:23 -08:00
dean
eec12c61a3 schema: add challenge notification types 2025-11-20 12:53:46 -08:00
dean
b7b482694e WIP: Add challenges feature schema and operations
- Add Challenge, ChallengeEntry, ChallengeInvitation, RuleSet types
- Add queries: challenges, challenge, challengeLeaderboard, myChallengeInvitations, myChallengeEntries, ruleSets
- Add mutations: createChallenge, createRuleSet, inviteUsersToChallenge, respondToChallengeInvitation, startChallenge, submitChallengeEntry, recalculateChallengeEntry

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-18 16:12:03 -08:00
5 changed files with 1022 additions and 978 deletions

View File

@@ -4017,7 +4017,6 @@ export type GetFeedQuery = {
private: boolean;
elapsedTime?: number | null;
tableSize: number;
pocketSize?: number | null;
owner?: {
__typename?: "UserGQL";
id: number;
@@ -4119,7 +4118,6 @@ export type VideoCardFieldsFragment = {
private: boolean;
elapsedTime?: number | null;
tableSize: number;
pocketSize?: number | null;
owner?: {
__typename?: "UserGQL";
id: number;
@@ -4217,7 +4215,6 @@ export type GetVideoFeedQuery = {
private: boolean;
elapsedTime?: number | null;
tableSize: number;
pocketSize?: number | null;
owner?: {
__typename?: "UserGQL";
id: number;
@@ -4968,7 +4965,6 @@ export type GetShotsWithMetadataFilterResultQuery = {
} | null;
playlist?: {
__typename?: "HLSPlaylistGQL";
videoId: number;
segmentDurations: Array<number>;
} | null;
} | null;
@@ -5051,7 +5047,6 @@ export type GetShotsWithMetadataQuery = {
} | null;
playlist?: {
__typename?: "HLSPlaylistGQL";
videoId: number;
segmentDurations: Array<number>;
} | null;
} | null;
@@ -5123,7 +5118,6 @@ export type GetShotsByIdsQuery = {
} | null;
playlist?: {
__typename?: "HLSPlaylistGQL";
videoId: number;
segmentDurations: Array<number>;
} | null;
} | null;
@@ -5188,7 +5182,6 @@ export type ShotWithAllFeaturesFragment = {
} | null;
playlist?: {
__typename?: "HLSPlaylistGQL";
videoId: number;
segmentDurations: Array<number>;
} | null;
} | null;
@@ -5270,7 +5263,6 @@ export type EditShotMutation = {
} | null;
playlist?: {
__typename?: "HLSPlaylistGQL";
videoId: number;
segmentDurations: Array<number>;
} | null;
} | null;
@@ -5457,7 +5449,21 @@ export type FollowUserMutationVariables = Exact<{
export type FollowUserMutation = {
__typename?: "Mutation";
followUser: { __typename?: "UserGQL"; id: number; username: string };
followUser: {
__typename?: "UserGQL";
username: string;
id: number;
following?: Array<{
__typename?: "UserGQL";
id: number;
username: string;
}> | null;
followers?: Array<{
__typename?: "UserGQL";
id: number;
username: string;
}> | null;
};
};
export type UnfollowUserMutationVariables = Exact<{
@@ -5466,7 +5472,21 @@ export type UnfollowUserMutationVariables = Exact<{
export type UnfollowUserMutation = {
__typename?: "Mutation";
unfollowUser: { __typename?: "UserGQL"; id: number; username: string };
unfollowUser: {
__typename?: "UserGQL";
username: string;
id: number;
following?: Array<{
__typename?: "UserGQL";
id: number;
username: string;
}> | null;
followers?: Array<{
__typename?: "UserGQL";
id: number;
username: string;
}> | null;
};
};
export type GetUserFollowingFollowersQueryVariables = Exact<{
@@ -5483,14 +5503,12 @@ export type GetUserFollowingFollowersQuery = {
id: number;
username: string;
profileImageUri?: string | null;
isFollowedByCurrentUser?: boolean | null;
}> | null;
followers?: Array<{
__typename?: "UserGQL";
id: number;
username: string;
profileImageUri?: string | null;
isFollowedByCurrentUser?: boolean | null;
}> | null;
} | null;
};
@@ -6385,7 +6403,6 @@ export const VideoCardFieldsFragmentDoc = gql`
streamSegmentType
}
tableSize
pocketSize
tags {
tagClasses {
name
@@ -6534,7 +6551,6 @@ export const ShotWithAllFeaturesFragmentDoc = gql`
streamSegmentType
}
playlist {
videoId
segmentDurations
}
}
@@ -11264,8 +11280,16 @@ export type GetUserTagsQueryResult = Apollo.QueryResult<
export const FollowUserDocument = gql`
mutation followUser($followedUserId: Int!) {
followUser(followedUserId: $followedUserId) {
id
username
id
following {
id
username
}
followers {
id
username
}
}
}
`;
@@ -11315,8 +11339,16 @@ export type FollowUserMutationOptions = Apollo.BaseMutationOptions<
export const UnfollowUserDocument = gql`
mutation unfollowUser($followedUserId: Int!) {
unfollowUser(followedUserId: $followedUserId) {
id
username
id
following {
id
username
}
followers {
id
username
}
}
}
`;
@@ -11371,13 +11403,11 @@ export const GetUserFollowingFollowersDocument = gql`
id
username
profileImageUri
isFollowedByCurrentUser
}
followers {
id
username
profileImageUri
isFollowedByCurrentUser
}
}
}

View File

@@ -50,7 +50,6 @@ fragment VideoCardFields on VideoGQL {
streamSegmentType
}
tableSize
pocketSize
tags {
tagClasses {
name

View File

@@ -192,7 +192,6 @@ fragment ShotWithAllFeatures on ShotGQL {
streamSegmentType
}
playlist {
videoId
segmentDurations
}
}

View File

@@ -88,15 +88,31 @@ query GetUserTags {
mutation followUser($followedUserId: Int!) {
followUser(followedUserId: $followedUserId) {
id
username
id
following {
id
username
}
followers {
id
username
}
}
}
mutation unfollowUser($followedUserId: Int!) {
unfollowUser(followedUserId: $followedUserId) {
id
username
id
following {
id
username
}
followers {
id
username
}
}
}
@@ -107,13 +123,11 @@ query getUserFollowingFollowers {
id
username
profileImageUri
isFollowedByCurrentUser
}
followers {
id
username
profileImageUri
isFollowedByCurrentUser
}
}
}

File diff suppressed because it is too large Load Diff