Skip to content

Commit

Permalink
use slug instead of fetched course id in manual completions
Browse files Browse the repository at this point in the history
  • Loading branch information
mipyykko committed Aug 30, 2023
1 parent 69994dc commit 9a55512
Show file tree
Hide file tree
Showing 5 changed files with 28 additions and 13 deletions.
22 changes: 17 additions & 5 deletions backend/schema/Completion/mutations.ts
Original file line number Diff line number Diff line change
Expand Up @@ -55,18 +55,30 @@ export const CompletionMutations = extendType({
type: "Completion",
args: {
completions: list(nonNull(arg({ type: "ManualCompletionArg" }))),
course_id: nonNull(stringArg()),
course_id: idArg(),
course_slug: stringArg(),
},
validate: (_, { course_id, course_slug }) => {
if (!course_id && !course_slug) {
throw new GraphQLUserInputError(
"must provide course_id or course_slug",
["course_id", "course_slug"],
)
}
},
authorize: isAdmin,
resolve: async (_, args, ctx) => {
const { course_id } = args
const { course_id, course_slug } = args

const course = await ctx.prisma.course.findUnique({
where: { id: course_id },
where: { id: course_id ?? undefined, slug: course_slug ?? undefined },
})

if (!course) {
throw new GraphQLUserInputError("course not found", "course_id")
throw new GraphQLUserInputError("course not found", [
"course_id",
"course_slug",
])
}
const completions = (args.completions ?? []).filter(isDefined)

Expand Down Expand Up @@ -113,7 +125,7 @@ export const CompletionMutations = extendType({
student_number:
databaseUser.real_student_number || databaseUser.student_number,
completion_language: null,
course_id: course.completions_handled_by_id ?? course_id,
course_id: course.completions_handled_by_id ?? course.id,
user_id: databaseUser.id ?? null,
grade: o.grade ?? null,
completion_date: o.completion_date ?? null,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,4 @@ import * as Types from "../types"

import { TypedDocumentNode as DocumentNode } from '@graphql-typed-document-node/core';

export const AddManualCompletionDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"AddManualCompletion"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"course_id"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"completions"}},"type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"ManualCompletionArg"}}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"addManualCompletion"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"course_id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"course_id"}}},{"kind":"Argument","name":{"kind":"Name","value":"completions"},"value":{"kind":"Variable","name":{"kind":"Name","value":"completions"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"CompletionCoreFields"}},{"kind":"Field","name":{"kind":"Name","value":"user"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"UserCoreFields"}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"CompletionCoreFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Completion"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"course_id"}},{"kind":"Field","name":{"kind":"Name","value":"user_id"}},{"kind":"Field","name":{"kind":"Name","value":"email"}},{"kind":"Field","name":{"kind":"Name","value":"student_number"}},{"kind":"Field","name":{"kind":"Name","value":"completion_language"}},{"kind":"Field","name":{"kind":"Name","value":"completion_link"}},{"kind":"Field","name":{"kind":"Name","value":"completion_date"}},{"kind":"Field","name":{"kind":"Name","value":"tier"}},{"kind":"Field","name":{"kind":"Name","value":"grade"}},{"kind":"Field","name":{"kind":"Name","value":"eligible_for_ects"}},{"kind":"Field","name":{"kind":"Name","value":"project_completion"}},{"kind":"Field","name":{"kind":"Name","value":"registered"}},{"kind":"Field","name":{"kind":"Name","value":"created_at"}},{"kind":"Field","name":{"kind":"Name","value":"updated_at"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"UserCoreFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"User"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"upstream_id"}},{"kind":"Field","name":{"kind":"Name","value":"first_name"}},{"kind":"Field","name":{"kind":"Name","value":"last_name"}},{"kind":"Field","name":{"kind":"Name","value":"full_name"}},{"kind":"Field","name":{"kind":"Name","value":"username"}},{"kind":"Field","name":{"kind":"Name","value":"email"}},{"kind":"Field","name":{"kind":"Name","value":"student_number"}},{"kind":"Field","name":{"kind":"Name","value":"real_student_number"}},{"kind":"Field","name":{"kind":"Name","value":"created_at"}},{"kind":"Field","name":{"kind":"Name","value":"updated_at"}}]}}]} as unknown as DocumentNode<Types.AddManualCompletionMutation, Types.AddManualCompletionMutationVariables>;
export const AddManualCompletionDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"AddManualCompletion"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"course_id"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"ID"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"course_slug"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"completions"}},"type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"ManualCompletionArg"}}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"addManualCompletion"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"course_id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"course_id"}}},{"kind":"Argument","name":{"kind":"Name","value":"course_slug"},"value":{"kind":"Variable","name":{"kind":"Name","value":"course_slug"}}},{"kind":"Argument","name":{"kind":"Name","value":"completions"},"value":{"kind":"Variable","name":{"kind":"Name","value":"completions"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"CompletionCoreFields"}},{"kind":"Field","name":{"kind":"Name","value":"user"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"UserCoreFields"}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"CompletionCoreFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Completion"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"course_id"}},{"kind":"Field","name":{"kind":"Name","value":"user_id"}},{"kind":"Field","name":{"kind":"Name","value":"email"}},{"kind":"Field","name":{"kind":"Name","value":"student_number"}},{"kind":"Field","name":{"kind":"Name","value":"completion_language"}},{"kind":"Field","name":{"kind":"Name","value":"completion_link"}},{"kind":"Field","name":{"kind":"Name","value":"completion_date"}},{"kind":"Field","name":{"kind":"Name","value":"tier"}},{"kind":"Field","name":{"kind":"Name","value":"grade"}},{"kind":"Field","name":{"kind":"Name","value":"eligible_for_ects"}},{"kind":"Field","name":{"kind":"Name","value":"project_completion"}},{"kind":"Field","name":{"kind":"Name","value":"registered"}},{"kind":"Field","name":{"kind":"Name","value":"created_at"}},{"kind":"Field","name":{"kind":"Name","value":"updated_at"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"UserCoreFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"User"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"upstream_id"}},{"kind":"Field","name":{"kind":"Name","value":"first_name"}},{"kind":"Field","name":{"kind":"Name","value":"last_name"}},{"kind":"Field","name":{"kind":"Name","value":"full_name"}},{"kind":"Field","name":{"kind":"Name","value":"username"}},{"kind":"Field","name":{"kind":"Name","value":"email"}},{"kind":"Field","name":{"kind":"Name","value":"student_number"}},{"kind":"Field","name":{"kind":"Name","value":"real_student_number"}},{"kind":"Field","name":{"kind":"Name","value":"created_at"}},{"kind":"Field","name":{"kind":"Name","value":"updated_at"}}]}}]} as unknown as DocumentNode<Types.AddManualCompletionMutation, Types.AddManualCompletionMutationVariables>;
8 changes: 5 additions & 3 deletions frontend/graphql/generated/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ export type MakeOptional<T, K extends keyof T> = Omit<T, K> & { [SubKey in K]?:
export type MakeMaybe<T, K extends keyof T> = Omit<T, K> & { [SubKey in K]: Maybe<T[SubKey]> };
export type MakeEmpty<T extends { [key: string]: unknown }, K extends keyof T> = { [_ in K]?: never };
export type Incremental<T> = T | { [P in keyof T]?: P extends ' $fragmentName' | '__typename' ? T[P] : never };
// Generated on 2023-07-31T17:43:32+03:00
// Generated on 2023-08-30T10:42:08+03:00

/** All built-in and custom scalars, mapped to their actual values */
export type Scalars = {
Expand Down Expand Up @@ -1995,7 +1995,8 @@ export type MutationaddImageArgs = {

export type MutationaddManualCompletionArgs = {
completions?: InputMaybe<Array<ManualCompletionArg>>;
course_id: Scalars['String']['input'];
course_id?: InputMaybe<Scalars['ID']['input']>;
course_slug?: InputMaybe<Scalars['String']['input']>;
};


Expand Down Expand Up @@ -5059,7 +5060,8 @@ export type RecheckCompletionsMutationVariables = Exact<{
export type RecheckCompletionsMutation = { __typename?: 'Mutation', recheckCompletions: string | null };

export type AddManualCompletionMutationVariables = Exact<{
course_id: Scalars['String']['input'];
course_id?: InputMaybe<Scalars['ID']['input']>;
course_slug?: InputMaybe<Scalars['String']['input']>;
completions?: InputMaybe<Array<ManualCompletionArg> | ManualCompletionArg>;
}>;

Expand Down
5 changes: 3 additions & 2 deletions frontend/graphql/mutations/completion.mutations.graphql
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,11 @@ mutation RecheckCompletions($slug: String) {
}

mutation AddManualCompletion(
$course_id: String!
$course_id: ID
$course_slug: String
$completions: [ManualCompletionArg!]
) {
addManualCompletion(course_id: $course_id, completions: $completions) {
addManualCompletion(course_id: $course_id, course_slug: $course_slug, completions: $completions) {
...CompletionCoreFields
user {
...UserCoreFields
Expand Down
4 changes: 2 additions & 2 deletions frontend/pages/courses/[slug]/manual-completions.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -188,7 +188,7 @@ const ManualCompletions = () => {
.then(() =>
addCompletions({
variables: {
course_id: courseData?.course?.id ?? "",
course_slug: slug,
completions: filteredData,
},
}),
Expand All @@ -198,7 +198,7 @@ const ManualCompletions = () => {
} else {
addCompletions({
variables: {
course_id: courseData?.course?.id ?? "",
course_slug: slug,
completions: filteredData,
},
})
Expand Down

0 comments on commit 9a55512

Please sign in to comment.