Skip to content

Commit

Permalink
Merge pull request #2642 from flacial/2641-create-the-resolvers-for-u…
Browse files Browse the repository at this point in the history
…pdating-the-user-data

Add resolver for updating user names
  • Loading branch information
flacial authored Dec 24, 2022
2 parents c0c12f3 + 2793312 commit d8a1aca
Show file tree
Hide file tree
Showing 6 changed files with 183 additions and 1 deletion.
113 changes: 113 additions & 0 deletions graphql/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -172,6 +172,7 @@ export type Mutation = {
updateExercise: Exercise
updateLesson: Array<Lesson>
updateModule: Module
updateUserNames?: Maybe<User>
}

export type MutationAcceptSubmissionArgs = {
Expand Down Expand Up @@ -351,6 +352,11 @@ export type MutationUpdateModuleArgs = {
order: Scalars['Int']
}

export type MutationUpdateUserNamesArgs = {
name: Scalars['String']
username: Scalars['String']
}

export type Query = {
__typename?: 'Query'
alerts: Array<Alert>
Expand Down Expand Up @@ -1420,6 +1426,21 @@ export type ChangePwMutation = {
changePw?: { __typename?: 'AuthResponse'; success?: boolean | null } | null
}

export type UpdateUserNamesMutationVariables = Exact<{
username: Scalars['String']
name: Scalars['String']
}>

export type UpdateUserNamesMutation = {
__typename?: 'Mutation'
updateUserNames?: {
__typename?: 'User'
id: number
username: string
name: string
} | null
}

export type UserInfoQueryVariables = Exact<{
username: Scalars['String']
}>
Expand Down Expand Up @@ -2028,6 +2049,12 @@ export type MutationResolvers<
'content' | 'id' | 'lessonId' | 'name' | 'order'
>
>
updateUserNames?: Resolver<
Maybe<ResolversTypes['User']>,
ParentType,
ContextType,
RequireFields<MutationUpdateUserNamesArgs, 'name' | 'username'>
>
}>

export type QueryResolvers<
Expand Down Expand Up @@ -6214,6 +6241,90 @@ export type ChangePwMutationOptions = Apollo.BaseMutationOptions<
ChangePwMutation,
ChangePwMutationVariables
>
export const UpdateUserNamesDocument = gql`
mutation updateUserNames($username: String!, $name: String!) {
updateUserNames(username: $username, name: $name) {
id
username
name
}
}
`
export type UpdateUserNamesMutationFn = Apollo.MutationFunction<
UpdateUserNamesMutation,
UpdateUserNamesMutationVariables
>
export type UpdateUserNamesProps<
TChildProps = {},
TDataName extends string = 'mutate'
> = {
[key in TDataName]: Apollo.MutationFunction<
UpdateUserNamesMutation,
UpdateUserNamesMutationVariables
>
} & TChildProps
export function withUpdateUserNames<
TProps,
TChildProps = {},
TDataName extends string = 'mutate'
>(
operationOptions?: ApolloReactHoc.OperationOption<
TProps,
UpdateUserNamesMutation,
UpdateUserNamesMutationVariables,
UpdateUserNamesProps<TChildProps, TDataName>
>
) {
return ApolloReactHoc.withMutation<
TProps,
UpdateUserNamesMutation,
UpdateUserNamesMutationVariables,
UpdateUserNamesProps<TChildProps, TDataName>
>(UpdateUserNamesDocument, {
alias: 'updateUserNames',
...operationOptions
})
}

/**
* __useUpdateUserNamesMutation__
*
* To run a mutation, you first call `useUpdateUserNamesMutation` within a React component and pass it any options that fit your needs.
* When your component renders, `useUpdateUserNamesMutation` returns a tuple that includes:
* - A mutate function that you can call at any time to execute the mutation
* - An object with fields that represent the current status of the mutation's execution
*
* @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;
*
* @example
* const [updateUserNamesMutation, { data, loading, error }] = useUpdateUserNamesMutation({
* variables: {
* username: // value for 'username'
* name: // value for 'name'
* },
* });
*/
export function useUpdateUserNamesMutation(
baseOptions?: Apollo.MutationHookOptions<
UpdateUserNamesMutation,
UpdateUserNamesMutationVariables
>
) {
const options = { ...defaultOptions, ...baseOptions }
return Apollo.useMutation<
UpdateUserNamesMutation,
UpdateUserNamesMutationVariables
>(UpdateUserNamesDocument, options)
}
export type UpdateUserNamesMutationHookResult = ReturnType<
typeof useUpdateUserNamesMutation
>
export type UpdateUserNamesMutationResult =
Apollo.MutationResult<UpdateUserNamesMutation>
export type UpdateUserNamesMutationOptions = Apollo.BaseMutationOptions<
UpdateUserNamesMutation,
UpdateUserNamesMutationVariables
>
export const UserInfoDocument = gql`
query userInfo($username: String!) {
lessons {
Expand Down Expand Up @@ -6570,6 +6681,7 @@ export type MutationKeySpecifier = (
| 'updateExercise'
| 'updateLesson'
| 'updateModule'
| 'updateUserNames'
| MutationKeySpecifier
)[]
export type MutationFieldPolicy = {
Expand Down Expand Up @@ -6603,6 +6715,7 @@ export type MutationFieldPolicy = {
updateExercise?: FieldPolicy<any> | FieldReadFunction<any>
updateLesson?: FieldPolicy<any> | FieldReadFunction<any>
updateModule?: FieldPolicy<any> | FieldReadFunction<any>
updateUserNames?: FieldPolicy<any> | FieldReadFunction<any>
}
export type QueryKeySpecifier = (
| 'alerts'
Expand Down
13 changes: 13 additions & 0 deletions graphql/queries/updateUserNames.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import { gql } from '@apollo/client'

const UPDATE_USER_NAMES = gql`
mutation updateUserNames($username: String!, $name: String!) {
updateUserNames(username: $username, name: $name) {
id
username
name
}
}
`

export default UPDATE_USER_NAMES
4 changes: 3 additions & 1 deletion graphql/resolvers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ import {
addExerciseComment,
getChildComments
} from './resolvers/exerciseCommentCrud'
import { updateUserNames } from './resolvers/userDataCrud'

export default {
Query: {
Expand Down Expand Up @@ -99,6 +100,7 @@ export default {
flagExercise,
removeExerciseFlag,
unlinkDiscord,
addExerciseComment
addExerciseComment,
updateUserNames
}
}
30 changes: 30 additions & 0 deletions graphql/resolvers/userDataCrud.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
/**
* @jest-environment node
*/

import prismaMock from '../../__tests__/utils/prismaMock'
import { updateUserNames } from './userDataCrud'

const mockUsername = 'birdCatcher'
const mockName = 'bird spike'

describe('User Data CRUD resolvers', () => {
it('Should update the user username and name', async () => {
expect.assertions(1)

const userMock = {
username: mockUsername,
name: mockName
}

prismaMock.user.update.mockResolvedValueOnce(userMock)

expect(
updateUserNames(
null,
{ username: mockUsername, mockName },
{ req: { user: { id: 1 } } }
)
).resolves.toStrictEqual(userMock)
})
})
23 changes: 23 additions & 0 deletions graphql/resolvers/userDataCrud.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import { User } from '@prisma/client'
import { MutationUpdateUserNamesArgs } from '..'
import { withUserContainer } from '../../containers/withUserContainer'
import prisma from '../../prisma'

export const updateUserNames = withUserContainer<
Promise<User>,
MutationUpdateUserNamesArgs
>(async (_, args, { req }) => {
const { username, name } = args

const user = await prisma.user.update({
where: {
id: req.user!.id
},
data: {
username,
name
}
})

return user
})
1 change: 1 addition & 0 deletions graphql/typeDefs.ts
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,7 @@ export default gql`
id: Int!
): [Lesson]
unlinkDiscord: User
updateUserNames(name: String!, username: String!): User
}
type AuthResponse {
Expand Down

1 comment on commit d8a1aca

@vercel
Copy link

@vercel vercel bot commented on d8a1aca Dec 24, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please sign in to comment.