From c3d7cefdf1766b7e59bc3c9d55f7d95ca52c36a1 Mon Sep 17 00:00:00 2001 From: Nikita Sarbaev Date: Tue, 18 Oct 2022 16:27:51 +0200 Subject: [PATCH 01/55] feat: initial commit --- packages/api/codegen.yml | 1 + packages/api/schema.gql | 78 + packages/api/src/context.ts | 2 +- packages/api/src/graphql.ts | 522 ++++--- packages/api/src/models.ts | 5 + packages/backend/src/db/env.ts | 6 + .../backend/src/repositories/paper.repo.ts | 19 + .../backend/src/resolvers/paper.resolver.ts | 18 + packages/frontend/src/graphql/index.tsx | 1259 ++++++++++++++--- serverless.yml | 16 + 10 files changed, 1551 insertions(+), 375 deletions(-) create mode 100644 packages/backend/src/repositories/paper.repo.ts create mode 100644 packages/backend/src/resolvers/paper.resolver.ts diff --git a/packages/api/codegen.yml b/packages/api/codegen.yml index e9fda41..9fc0692 100644 --- a/packages/api/codegen.yml +++ b/packages/api/codegen.yml @@ -22,3 +22,4 @@ generates: Trainer: ./models#Trainer Trainee: ./models#Trainee UserInterface: ./models#UserInterface + Paper: ./models#Paper diff --git a/packages/api/schema.gql b/packages/api/schema.gql index f89bc98..e5ed620 100644 --- a/packages/api/schema.gql +++ b/packages/api/schema.gql @@ -98,6 +98,27 @@ type UpdateReportPayload { report: Report! } +input MentorInput { + name: String + email: String + signature: String +} + +input PaperInput { + client: String + mentor: MentorInput + periodStart: String + periodEnd: String + subject: String + status: PaperStatus +} + +input AnswerPaperInput { + id: ID! + questionId: ID! + answer: String! +} + type Mutation { """ [DEV] Login as a user. @@ -215,6 +236,21 @@ type Mutation { Create OAuth Code """ createOAuthCode: String! + + """ + Create Paper + """ + postPaper(input: PaperInput!, id: ID): Paper! + + """ + Delete Paper + """ + deletePaper(id: ID!): Boolean! + + """ + Update Paper + """ + answerPaper(input: AnswerPaperInput!): PaperFormData! } type LaraConfig { @@ -291,6 +327,11 @@ type Query { Get the alexa account linking url """ alexaLinkingUrl: String + + """ + Get the PAPER + """ + getPaper(id: ID!, token: String): Paper } type PrintPayload { @@ -480,3 +521,40 @@ enum UserTypeEnum { """ Admin } + +enum PaperStatus { + InProgress + TraineeDone + MentorDone + InReview + Archived +} + +type PaperFormData { + id: ID! + question: String! + answer: String + hint: String +} + +type Mentor { + name: String! + email: String! + signature: String! +} + +type Paper { + id: ID! + trainee: Trainee! + status: PaperStatus! + traineeForm: [PaperFormData!]! + trainerForm: [PaperFormData!]! + conclusion: String + archivedAt: String + createdAt: String! + client: String! + mentor: Mentor! + periodStart: String! + periodEnd: String! + subject: String! +} diff --git a/packages/api/src/context.ts b/packages/api/src/context.ts index 9de45bb..929f1cf 100644 --- a/packages/api/src/context.ts +++ b/packages/api/src/context.ts @@ -8,7 +8,7 @@ type ExpressContext = { res: Response } -type BaseContext = { +export type BaseContext = { event: APIGatewayProxyEvent express: ExpressContext } diff --git a/packages/api/src/graphql.ts b/packages/api/src/graphql.ts index d30f8fa..e5274ff 100644 --- a/packages/api/src/graphql.ts +++ b/packages/api/src/graphql.ts @@ -1,13 +1,12 @@ import { GraphQLResolveInfo } from 'graphql'; -import { CommentableInterface, Comment, Entry, Day, Report, Trainer, Trainee, UserInterface } from './models'; +import { CommentableInterface, Comment, Entry, Day, Report, Trainer, Trainee, UserInterface, Paper } from './models'; import { Context } from './context'; export type Maybe = T | undefined; -export type InputMaybe = T | undefined; export type Exact = { [K in keyof T]: T[K] }; export type MakeOptional = Omit & { [SubKey in K]?: Maybe }; export type MakeMaybe = Omit & { [SubKey in K]: Maybe }; export type Omit = Pick>; -export type RequireFields = Omit & { [P in K]-?: NonNullable }; +export type RequireFields = { [X in Exclude]?: T[X] } & { [P in K]-?: NonNullable }; /** All built-in and custom scalars, mapped to their actual values */ export type Scalars = { ID: string; @@ -19,19 +18,25 @@ export type Scalars = { export type GqlAdmin = GqlUserInterface & { __typename?: 'Admin'; - alexaSkillLinked?: Maybe; avatar: Scalars['String']; createdAt: Scalars['String']; - email: Scalars['String']; firstName: Scalars['String']; id: Scalars['ID']; language?: Maybe; lastName: Scalars['String']; notification?: Maybe; - signature?: Maybe; theme?: Maybe; type: GqlUserTypeEnum; username: Scalars['String']; + email: Scalars['String']; + signature?: Maybe; + alexaSkillLinked?: Maybe; +}; + +export type GqlAnswerPaperInput = { + id: Scalars['ID']; + questionId: Scalars['ID']; + answer: Scalars['String']; }; export type GqlComment = { @@ -62,13 +67,13 @@ export type GqlCreateCommentPayload = { }; export type GqlCreateTraineeInput = { - companyId: Scalars['String']; - email: Scalars['String']; - endDate: Scalars['String']; firstName: Scalars['String']; lastName: Scalars['String']; + email: Scalars['String']; startDate: Scalars['String']; + endDate: Scalars['String']; startOfToolUsage: Scalars['String']; + companyId: Scalars['String']; }; export type GqlCreateTrainerInput = { @@ -88,16 +93,16 @@ export type GqlDay = GqlCommentableInterface & { }; export type GqlDayStatusEnum = + /** workday */ + | 'work' + /** vacation */ + | 'vacation' + /** sick leave */ + | 'sick' /** school/university */ | 'education' /** public holiday */ - | 'holiday' - /** sick leave */ - | 'sick' - /** vacation */ - | 'vacation' - /** workday */ - | 'work'; + | 'holiday'; /** Autogenerated return type of DevSetUser */ export type GqlDevSetUserPayload = { @@ -122,14 +127,27 @@ export type GqlEntryInput = { export type GqlLaraConfig = { __typename?: 'LaraConfig'; + minWorkDayMinutes: Scalars['Int']; + maxWorkDayMinutes: Scalars['Int']; expectedWorkDayMinutes: Scalars['Int']; - finishedWeekDayCount: Scalars['Int']; + minEducationDayMinutes: Scalars['Int']; maxEducationDayMinutes: Scalars['Int']; maxEntryMinutes: Scalars['Int']; maxPeriodYearsCount: Scalars['Int']; - maxWorkDayMinutes: Scalars['Int']; - minEducationDayMinutes: Scalars['Int']; - minWorkDayMinutes: Scalars['Int']; + finishedWeekDayCount: Scalars['Int']; +}; + +export type GqlMentor = { + __typename?: 'Mentor'; + name: Scalars['String']; + email: Scalars['String']; + signature: Scalars['String']; +}; + +export type GqlMentorInput = { + name?: Maybe; + email?: Maybe; + signature?: Maybe; }; export type GqlMutateEntryPayload = { @@ -155,26 +173,12 @@ export type GqlMutation = { createCommentOnReport: GqlCreateCommentPayload; /** Creates a new entry which is assigned to the matching report based on the day Id */ createEntry: GqlMutateEntryPayload; - /** Create OAuth Code */ - createOAuthCode: Scalars['String']; - /** Creates Trainee. */ - createTrainee?: Maybe; - /** Creates Trainer. */ - createTrainer?: Maybe; /** Deletes an entry by the given ID. Only considers entries made by the current user. Returns the ID of the deleted entry. */ deleteEntry: GqlMutateEntryPayload; - /** Link Alexa account */ - linkAlexa?: Maybe; /** Login via google. */ login?: Maybe; - /** Marks User to be deleted */ - markUserForDeletion?: Maybe; /** Unclaims a Trainee by the current Trainer */ unclaimTrainee?: Maybe; - /** Unlink Alexa account */ - unlinkAlexa?: Maybe; - /** Unmarks User from deletion */ - unmarkUserForDeletion?: Maybe; /** Updates the current trainee */ updateCurrentTrainee?: Maybe; /** Updates the current user */ @@ -185,10 +189,30 @@ export type GqlMutation = { updateEntryOrder: GqlMutateEntryPayload; /** Updates report which is identified by the id argument. */ updateReport?: Maybe; + /** Creates Trainee. */ + createTrainee?: Maybe; + /** Creates Trainer. */ + createTrainer?: Maybe; + /** Marks User to be deleted */ + markUserForDeletion?: Maybe; + /** Unmarks User from deletion */ + unmarkUserForDeletion?: Maybe; /** Updates Trainee. */ updateTrainee?: Maybe; /** Updates Trainer. */ updateTrainer?: Maybe; + /** Link Alexa account */ + linkAlexa?: Maybe; + /** Unlink Alexa account */ + unlinkAlexa?: Maybe; + /** Create OAuth Code */ + createOAuthCode: Scalars['String']; + /** Create Paper */ + postPaper: GqlPaper; + /** Delete Paper */ + deletePaper: Scalars['Boolean']; + /** Update Paper */ + answerPaper: GqlPaperFormData; }; @@ -208,22 +232,22 @@ export type GqlMutationClaimTraineeArgs = { export type GqlMutationCreateCommentOnDayArgs = { - id: Scalars['ID']; text: Scalars['String']; + id: Scalars['ID']; traineeId: Scalars['ID']; }; export type GqlMutationCreateCommentOnEntryArgs = { - id: Scalars['ID']; text: Scalars['String']; + id: Scalars['ID']; traineeId: Scalars['ID']; }; export type GqlMutationCreateCommentOnReportArgs = { - id: Scalars['ID']; text: Scalars['String']; + id: Scalars['ID']; traineeId: Scalars['ID']; }; @@ -234,60 +258,34 @@ export type GqlMutationCreateEntryArgs = { }; -export type GqlMutationCreateTraineeArgs = { - input: GqlCreateTraineeInput; -}; - - -export type GqlMutationCreateTrainerArgs = { - input: GqlCreateTrainerInput; -}; - - export type GqlMutationDeleteEntryArgs = { id: Scalars['ID']; }; -export type GqlMutationLinkAlexaArgs = { - code: Scalars['String']; - state: Scalars['String']; -}; - - export type GqlMutationLoginArgs = { googleToken: Scalars['String']; }; -export type GqlMutationMarkUserForDeletionArgs = { - id: Scalars['ID']; -}; - - export type GqlMutationUnclaimTraineeArgs = { id: Scalars['ID']; }; -export type GqlMutationUnmarkUserForDeletionArgs = { - id: Scalars['ID']; -}; - - export type GqlMutationUpdateCurrentTraineeArgs = { input: GqlUpdateCurrentTraineeInput; }; export type GqlMutationUpdateCurrentUserArgs = { - input?: InputMaybe; + input?: Maybe; }; export type GqlMutationUpdateDayArgs = { + status?: Maybe; id: Scalars['ID']; - status?: InputMaybe; }; @@ -298,38 +296,121 @@ export type GqlMutationUpdateEntryArgs = { export type GqlMutationUpdateEntryOrderArgs = { - dayId: Scalars['ID']; entryId: Scalars['ID']; + dayId: Scalars['ID']; orderId: Scalars['Int']; }; export type GqlMutationUpdateReportArgs = { - department?: InputMaybe; + summary?: Maybe; + department?: Maybe; + status?: Maybe; id: Scalars['ID']; - status?: InputMaybe; - summary?: InputMaybe; }; -export type GqlMutationUpdateTraineeArgs = { +export type GqlMutationCreateTraineeArgs = { + input: GqlCreateTraineeInput; +}; + + +export type GqlMutationCreateTrainerArgs = { + input: GqlCreateTrainerInput; +}; + + +export type GqlMutationMarkUserForDeletionArgs = { id: Scalars['ID']; +}; + + +export type GqlMutationUnmarkUserForDeletionArgs = { + id: Scalars['ID']; +}; + + +export type GqlMutationUpdateTraineeArgs = { input: GqlUpdateTraineeInput; + id: Scalars['ID']; }; export type GqlMutationUpdateTrainerArgs = { - id: Scalars['ID']; input: GqlUpdateTrainerInput; + id: Scalars['ID']; +}; + + +export type GqlMutationLinkAlexaArgs = { + code: Scalars['String']; + state: Scalars['String']; +}; + + +export type GqlMutationPostPaperArgs = { + input: GqlPaperInput; + id?: Maybe; +}; + + +export type GqlMutationDeletePaperArgs = { + id: Scalars['ID']; +}; + + +export type GqlMutationAnswerPaperArgs = { + input: GqlAnswerPaperInput; }; export type GqlOAuthPayload = { __typename?: 'OAuthPayload'; accessToken: Scalars['String']; - expiresIn: Scalars['Int']; refreshToken?: Maybe; + expiresIn: Scalars['Int']; }; +export type GqlPaper = { + __typename?: 'Paper'; + id: Scalars['ID']; + trainee: GqlTrainee; + status: GqlPaperStatus; + traineeForm: Array; + trainerForm: Array; + conclusion?: Maybe; + archivedAt?: Maybe; + createdAt: Scalars['String']; + client: Scalars['String']; + mentor: GqlMentor; + periodStart: Scalars['String']; + periodEnd: Scalars['String']; + subject: Scalars['String']; +}; + +export type GqlPaperFormData = { + __typename?: 'PaperFormData'; + id: Scalars['ID']; + question: Scalars['String']; + answer?: Maybe; + hint?: Maybe; +}; + +export type GqlPaperInput = { + client?: Maybe; + mentor?: Maybe; + periodStart?: Maybe; + periodEnd?: Maybe; + subject?: Maybe; + status?: Maybe; +}; + +export type GqlPaperStatus = + | 'InProgress' + | 'TraineeDone' + | 'MentorDone' + | 'InReview' + | 'Archived'; + export type GqlPrintPayload = { __typename?: 'PrintPayload'; estimatedWaitingTime: Scalars['Int']; @@ -337,18 +418,10 @@ export type GqlPrintPayload = { export type GqlQuery = { __typename?: 'Query'; - /** Get the alexa account linking url */ - alexaLinkingUrl?: Maybe; - /** Will look for Users to delete */ - cleanup: Scalars['Boolean']; - companies?: Maybe>; config: GqlLaraConfig; + companies?: Maybe>; /** Returns the logged in user. This user can be either a Trainee or a Trainer. */ currentUser?: Maybe; - /** Get a User by ID */ - getUser?: Maybe; - /** Print single report or report batch */ - print: GqlPrintPayload; /** Finds the report for a specifig trainee on the requested year and week. */ reportForTrainee?: Maybe; /** Finds the report for the requested year and week. */ @@ -361,34 +434,50 @@ export type GqlQuery = { trainees: Array; /** Get all Trainers */ trainers: Array; + /** Print single report or report batch */ + print: GqlPrintPayload; + /** Get a User by ID */ + getUser?: Maybe; + /** Will look for Users to delete */ + cleanup: Scalars['Boolean']; + /** Get the alexa account linking url */ + alexaLinkingUrl?: Maybe; + /** Get the PAPER */ + getPaper?: Maybe; }; -export type GqlQueryGetUserArgs = { +export type GqlQueryReportForTraineeArgs = { + year: Scalars['Int']; + week: Scalars['Int']; id: Scalars['ID']; }; -export type GqlQueryPrintArgs = { - ids: Array; +export type GqlQueryReportForYearAndWeekArgs = { + year: Scalars['Int']; + week: Scalars['Int']; }; -export type GqlQueryReportForTraineeArgs = { - id: Scalars['ID']; - week: Scalars['Int']; - year: Scalars['Int']; +export type GqlQueryReportsArgs = { + statuses?: Maybe>; }; -export type GqlQueryReportForYearAndWeekArgs = { - week: Scalars['Int']; - year: Scalars['Int']; +export type GqlQueryPrintArgs = { + ids: Array; }; -export type GqlQueryReportsArgs = { - statuses?: InputMaybe>; +export type GqlQueryGetUserArgs = { + id: Scalars['ID']; +}; + + +export type GqlQueryGetPaperArgs = { + id: Scalars['ID']; + token?: Maybe; }; export type GqlReport = GqlCommentableInterface & { @@ -398,36 +487,33 @@ export type GqlReport = GqlCommentableInterface & { days: Array; department?: Maybe; id: Scalars['ID']; - nextReportLink?: Maybe; - previousReportLink?: Maybe; - reportAccepted?: Maybe; status: GqlReportStatus; summary?: Maybe; week: Scalars['Int']; year: Scalars['Int']; + reportAccepted?: Maybe; + previousReportLink?: Maybe; + nextReportLink?: Maybe; }; /** Represents the current state of the report */ export type GqlReportStatus = - /** Done reports are marked as archived */ - | 'archived' - /** Used if there is any problem with a report */ - | 'reopened' + /** Report is open */ + | 'todo' /** Passes the report to the trainer */ | 'review' - /** Report is open */ - | 'todo'; + /** Used if there is any problem with a report */ + | 'reopened' + /** Done reports are marked as archived */ + | 'archived'; export type GqlTrainee = GqlUserInterface & { __typename?: 'Trainee'; - alexaSkillLinked?: Maybe; /** The url for the users avatar image. */ avatar: Scalars['String']; company: GqlCompany; course?: Maybe; createdAt: Scalars['String']; - deleteAt?: Maybe; - email: Scalars['String']; endDate?: Maybe; endOfToolUsage?: Maybe; firstName: Scalars['String']; @@ -435,7 +521,6 @@ export type GqlTrainee = GqlUserInterface & { language?: Maybe; lastName: Scalars['String']; notification?: Maybe; - openReportsCount: Scalars['Int']; reports: Array; signature?: Maybe; startDate?: Maybe; @@ -444,15 +529,16 @@ export type GqlTrainee = GqlUserInterface & { trainer?: Maybe; type: GqlUserTypeEnum; username: Scalars['String']; + email: Scalars['String']; + deleteAt?: Maybe; + openReportsCount: Scalars['Int']; + alexaSkillLinked?: Maybe; }; export type GqlTrainer = GqlUserInterface & { __typename?: 'Trainer'; - alexaSkillLinked?: Maybe; avatar: Scalars['String']; createdAt: Scalars['String']; - deleteAt?: Maybe; - email: Scalars['String']; firstName: Scalars['String']; id: Scalars['ID']; language?: Maybe; @@ -463,6 +549,9 @@ export type GqlTrainer = GqlUserInterface & { trainees: Array; type: GqlUserTypeEnum; username: Scalars['String']; + email: Scalars['String']; + deleteAt?: Maybe; + alexaSkillLinked?: Maybe; }; export type GqlTrainerTraineePayload = { @@ -472,43 +561,41 @@ export type GqlTrainerTraineePayload = { }; export type GqlUpdateCurrentTraineeInput = { - course?: InputMaybe; + course?: Maybe; }; export type GqlUpdateReportPayload = { __typename?: 'UpdateReportPayload'; - report: GqlReport; trainee: GqlTrainee; + report: GqlReport; }; export type GqlUpdateTraineeInput = { - companyId?: InputMaybe; - email?: InputMaybe; - endDate?: InputMaybe; - firstName?: InputMaybe; - lastName?: InputMaybe; - startDate?: InputMaybe; - startOfToolUsage?: InputMaybe; + firstName?: Maybe; + lastName?: Maybe; + email?: Maybe; + startDate?: Maybe; + endDate?: Maybe; + startOfToolUsage?: Maybe; + companyId?: Maybe; }; export type GqlUpdateTrainerInput = { - email?: InputMaybe; - firstName?: InputMaybe; - lastName?: InputMaybe; + email?: Maybe; + firstName?: Maybe; + lastName?: Maybe; }; export type GqlUserInput = { - language?: InputMaybe; - notification?: InputMaybe; - signature?: InputMaybe; - theme?: InputMaybe; + language?: Maybe; + theme?: Maybe; + signature?: Maybe; + notification?: Maybe; }; export type GqlUserInterface = { - alexaSkillLinked?: Maybe; avatar: Scalars['String']; createdAt: Scalars['String']; - email: Scalars['String']; firstName: Scalars['String']; id: Scalars['ID']; language?: Maybe; @@ -518,15 +605,17 @@ export type GqlUserInterface = { theme?: Maybe; type: GqlUserTypeEnum; username: Scalars['String']; + email: Scalars['String']; + alexaSkillLinked?: Maybe; }; export type GqlUserTypeEnum = - /** User is an Admin */ - | 'Admin' /** User is a Trainee */ | 'Trainee' /** User is a Trainer */ - | 'Trainer'; + | 'Trainer' + /** User is an Admin */ + | 'Admin'; export type WithIndex = TObject & Record; export type ResolversObject = WithIndex; @@ -537,7 +626,21 @@ export type ResolverTypeWrapper = Promise | T; export type ResolverWithResolve = { resolve: ResolverFn; }; -export type Resolver = ResolverFn | ResolverWithResolve; + +export type LegacyStitchingResolver = { + fragment: string; + resolve: ResolverFn; +}; + +export type NewStitchingResolver = { + selectionSet: string; + resolve: ResolverFn; +}; +export type StitchingResolver = LegacyStitchingResolver | NewStitchingResolver; +export type Resolver = + | ResolverFn + | ResolverWithResolve + | StitchingResolver; export type ResolverFn = ( parent: TParent, @@ -551,7 +654,7 @@ export type SubscriptionSubscribeFn = ( args: TArgs, context: TContext, info: GraphQLResolveInfo -) => AsyncIterable | Promise>; +) => AsyncIterator | Promise>; export type SubscriptionResolveFn = ( parent: TParent, @@ -599,7 +702,10 @@ export type DirectiveResolverFn; + String: ResolverTypeWrapper; + ID: ResolverTypeWrapper; Boolean: ResolverTypeWrapper; + AnswerPaperInput: GqlAnswerPaperInput; Comment: ResolverTypeWrapper; CommentableInterface: ResolverTypeWrapper; Company: ResolverTypeWrapper; @@ -610,23 +716,27 @@ export type GqlResolversTypes = ResolversObject<{ DayStatusEnum: GqlDayStatusEnum; DevSetUserPayload: ResolverTypeWrapper & { user?: Maybe }>; Entry: ResolverTypeWrapper; - EntryInput: GqlEntryInput; - ID: ResolverTypeWrapper; Int: ResolverTypeWrapper; + EntryInput: GqlEntryInput; LaraConfig: ResolverTypeWrapper; + Mentor: ResolverTypeWrapper; + MentorInput: GqlMentorInput; MutateEntryPayload: ResolverTypeWrapper & { day: GqlResolversTypes['Day'], entry?: Maybe, report: GqlResolversTypes['Report'] }>; Mutation: ResolverTypeWrapper<{}>; OAuthPayload: ResolverTypeWrapper; + Paper: ResolverTypeWrapper; + PaperFormData: ResolverTypeWrapper; + PaperInput: GqlPaperInput; + PaperStatus: GqlPaperStatus; PrintPayload: ResolverTypeWrapper; Query: ResolverTypeWrapper<{}>; Report: ResolverTypeWrapper; ReportStatus: GqlReportStatus; - String: ResolverTypeWrapper; Trainee: ResolverTypeWrapper; Trainer: ResolverTypeWrapper; TrainerTraineePayload: ResolverTypeWrapper & { trainee: GqlResolversTypes['Trainee'], trainer: GqlResolversTypes['Trainer'] }>; UpdateCurrentTraineeInput: GqlUpdateCurrentTraineeInput; - UpdateReportPayload: ResolverTypeWrapper & { report: GqlResolversTypes['Report'], trainee: GqlResolversTypes['Trainee'] }>; + UpdateReportPayload: ResolverTypeWrapper & { trainee: GqlResolversTypes['Trainee'], report: GqlResolversTypes['Report'] }>; UpdateTraineeInput: GqlUpdateTraineeInput; UpdateTrainerInput: GqlUpdateTrainerInput; UserInput: GqlUserInput; @@ -637,7 +747,10 @@ export type GqlResolversTypes = ResolversObject<{ /** Mapping between all available schema types and the resolvers parents */ export type GqlResolversParentTypes = ResolversObject<{ Admin: GqlAdmin; + String: Scalars['String']; + ID: Scalars['ID']; Boolean: Scalars['Boolean']; + AnswerPaperInput: GqlAnswerPaperInput; Comment: Comment; CommentableInterface: CommentableInterface; Company: GqlCompany; @@ -647,22 +760,25 @@ export type GqlResolversParentTypes = ResolversObject<{ Day: Day; DevSetUserPayload: Omit & { user?: Maybe }; Entry: Entry; - EntryInput: GqlEntryInput; - ID: Scalars['ID']; Int: Scalars['Int']; + EntryInput: GqlEntryInput; LaraConfig: GqlLaraConfig; + Mentor: GqlMentor; + MentorInput: GqlMentorInput; MutateEntryPayload: Omit & { day: GqlResolversParentTypes['Day'], entry?: Maybe, report: GqlResolversParentTypes['Report'] }; Mutation: {}; OAuthPayload: GqlOAuthPayload; + Paper: Paper; + PaperFormData: GqlPaperFormData; + PaperInput: GqlPaperInput; PrintPayload: GqlPrintPayload; Query: {}; Report: Report; - String: Scalars['String']; Trainee: Trainee; Trainer: Trainer; TrainerTraineePayload: Omit & { trainee: GqlResolversParentTypes['Trainee'], trainer: GqlResolversParentTypes['Trainer'] }; UpdateCurrentTraineeInput: GqlUpdateCurrentTraineeInput; - UpdateReportPayload: Omit & { report: GqlResolversParentTypes['Report'], trainee: GqlResolversParentTypes['Trainee'] }; + UpdateReportPayload: Omit & { trainee: GqlResolversParentTypes['Trainee'], report: GqlResolversParentTypes['Report'] }; UpdateTraineeInput: GqlUpdateTraineeInput; UpdateTrainerInput: GqlUpdateTrainerInput; UserInput: GqlUserInput; @@ -670,19 +786,19 @@ export type GqlResolversParentTypes = ResolversObject<{ }>; export type GqlAdminResolvers = ResolversObject<{ - alexaSkillLinked?: Resolver, ParentType, ContextType>; avatar?: Resolver; createdAt?: Resolver; - email?: Resolver; firstName?: Resolver; id?: Resolver; language?: Resolver, ParentType, ContextType>; lastName?: Resolver; notification?: Resolver, ParentType, ContextType>; - signature?: Resolver, ParentType, ContextType>; theme?: Resolver, ParentType, ContextType>; type?: Resolver; username?: Resolver; + email?: Resolver; + signature?: Resolver, ParentType, ContextType>; + alexaSkillLinked?: Resolver, ParentType, ContextType>; __isTypeOf?: IsTypeOfResolverFn; }>; @@ -739,14 +855,21 @@ export type GqlEntryResolvers; export type GqlLaraConfigResolvers = ResolversObject<{ + minWorkDayMinutes?: Resolver; + maxWorkDayMinutes?: Resolver; expectedWorkDayMinutes?: Resolver; - finishedWeekDayCount?: Resolver; + minEducationDayMinutes?: Resolver; maxEducationDayMinutes?: Resolver; maxEntryMinutes?: Resolver; maxPeriodYearsCount?: Resolver; - maxWorkDayMinutes?: Resolver; - minEducationDayMinutes?: Resolver; - minWorkDayMinutes?: Resolver; + finishedWeekDayCount?: Resolver; + __isTypeOf?: IsTypeOfResolverFn; +}>; + +export type GqlMentorResolvers = ResolversObject<{ + name?: Resolver; + email?: Resolver; + signature?: Resolver; __isTypeOf?: IsTypeOfResolverFn; }>; @@ -761,34 +884,62 @@ export type GqlMutationResolvers, ParentType, ContextType, RequireFields>; _devsetusertype?: Resolver>; claimTrainee?: Resolver, ParentType, ContextType, RequireFields>; - createCommentOnDay?: Resolver>; - createCommentOnEntry?: Resolver>; - createCommentOnReport?: Resolver>; + createCommentOnDay?: Resolver>; + createCommentOnEntry?: Resolver>; + createCommentOnReport?: Resolver>; createEntry?: Resolver>; - createOAuthCode?: Resolver; - createTrainee?: Resolver, ParentType, ContextType, RequireFields>; - createTrainer?: Resolver, ParentType, ContextType, RequireFields>; deleteEntry?: Resolver>; - linkAlexa?: Resolver, ParentType, ContextType, RequireFields>; login?: Resolver, ParentType, ContextType, RequireFields>; - markUserForDeletion?: Resolver, ParentType, ContextType, RequireFields>; unclaimTrainee?: Resolver, ParentType, ContextType, RequireFields>; - unlinkAlexa?: Resolver, ParentType, ContextType>; - unmarkUserForDeletion?: Resolver, ParentType, ContextType, RequireFields>; updateCurrentTrainee?: Resolver, ParentType, ContextType, RequireFields>; - updateCurrentUser?: Resolver, ParentType, ContextType, Partial>; + updateCurrentUser?: Resolver, ParentType, ContextType, RequireFields>; updateDay?: Resolver, ParentType, ContextType, RequireFields>; updateEntry?: Resolver>; - updateEntryOrder?: Resolver>; + updateEntryOrder?: Resolver>; updateReport?: Resolver, ParentType, ContextType, RequireFields>; - updateTrainee?: Resolver, ParentType, ContextType, RequireFields>; - updateTrainer?: Resolver, ParentType, ContextType, RequireFields>; + createTrainee?: Resolver, ParentType, ContextType, RequireFields>; + createTrainer?: Resolver, ParentType, ContextType, RequireFields>; + markUserForDeletion?: Resolver, ParentType, ContextType, RequireFields>; + unmarkUserForDeletion?: Resolver, ParentType, ContextType, RequireFields>; + updateTrainee?: Resolver, ParentType, ContextType, RequireFields>; + updateTrainer?: Resolver, ParentType, ContextType, RequireFields>; + linkAlexa?: Resolver, ParentType, ContextType, RequireFields>; + unlinkAlexa?: Resolver, ParentType, ContextType>; + createOAuthCode?: Resolver; + postPaper?: Resolver>; + deletePaper?: Resolver>; + answerPaper?: Resolver>; }>; export type GqlOAuthPayloadResolvers = ResolversObject<{ accessToken?: Resolver; - expiresIn?: Resolver; refreshToken?: Resolver, ParentType, ContextType>; + expiresIn?: Resolver; + __isTypeOf?: IsTypeOfResolverFn; +}>; + +export type GqlPaperResolvers = ResolversObject<{ + id?: Resolver; + trainee?: Resolver; + status?: Resolver; + traineeForm?: Resolver, ParentType, ContextType>; + trainerForm?: Resolver, ParentType, ContextType>; + conclusion?: Resolver, ParentType, ContextType>; + archivedAt?: Resolver, ParentType, ContextType>; + createdAt?: Resolver; + client?: Resolver; + mentor?: Resolver; + periodStart?: Resolver; + periodEnd?: Resolver; + subject?: Resolver; + __isTypeOf?: IsTypeOfResolverFn; +}>; + +export type GqlPaperFormDataResolvers = ResolversObject<{ + id?: Resolver; + question?: Resolver; + answer?: Resolver, ParentType, ContextType>; + hint?: Resolver, ParentType, ContextType>; __isTypeOf?: IsTypeOfResolverFn; }>; @@ -798,19 +949,20 @@ export type GqlPrintPayloadResolvers; export type GqlQueryResolvers = ResolversObject<{ - alexaLinkingUrl?: Resolver, ParentType, ContextType>; - cleanup?: Resolver; - companies?: Resolver>, ParentType, ContextType>; config?: Resolver; + companies?: Resolver>, ParentType, ContextType>; currentUser?: Resolver, ParentType, ContextType>; - getUser?: Resolver, ParentType, ContextType, RequireFields>; - print?: Resolver>; - reportForTrainee?: Resolver, ParentType, ContextType, RequireFields>; - reportForYearAndWeek?: Resolver, ParentType, ContextType, RequireFields>; - reports?: Resolver>, ParentType, ContextType, Partial>; + reportForTrainee?: Resolver, ParentType, ContextType, RequireFields>; + reportForYearAndWeek?: Resolver, ParentType, ContextType, RequireFields>; + reports?: Resolver>, ParentType, ContextType, RequireFields>; suggestions?: Resolver, ParentType, ContextType>; trainees?: Resolver, ParentType, ContextType>; trainers?: Resolver, ParentType, ContextType>; + print?: Resolver>; + getUser?: Resolver, ParentType, ContextType, RequireFields>; + cleanup?: Resolver; + alexaLinkingUrl?: Resolver, ParentType, ContextType>; + getPaper?: Resolver, ParentType, ContextType, RequireFields>; }>; export type GqlReportResolvers = ResolversObject<{ @@ -819,24 +971,21 @@ export type GqlReportResolvers, ParentType, ContextType>; department?: Resolver, ParentType, ContextType>; id?: Resolver; - nextReportLink?: Resolver, ParentType, ContextType>; - previousReportLink?: Resolver, ParentType, ContextType>; - reportAccepted?: Resolver, ParentType, ContextType>; status?: Resolver; summary?: Resolver, ParentType, ContextType>; week?: Resolver; year?: Resolver; + reportAccepted?: Resolver, ParentType, ContextType>; + previousReportLink?: Resolver, ParentType, ContextType>; + nextReportLink?: Resolver, ParentType, ContextType>; __isTypeOf?: IsTypeOfResolverFn; }>; export type GqlTraineeResolvers = ResolversObject<{ - alexaSkillLinked?: Resolver, ParentType, ContextType>; avatar?: Resolver; company?: Resolver; course?: Resolver, ParentType, ContextType>; createdAt?: Resolver; - deleteAt?: Resolver, ParentType, ContextType>; - email?: Resolver; endDate?: Resolver, ParentType, ContextType>; endOfToolUsage?: Resolver, ParentType, ContextType>; firstName?: Resolver; @@ -844,7 +993,6 @@ export type GqlTraineeResolvers, ParentType, ContextType>; lastName?: Resolver; notification?: Resolver, ParentType, ContextType>; - openReportsCount?: Resolver; reports?: Resolver, ParentType, ContextType>; signature?: Resolver, ParentType, ContextType>; startDate?: Resolver, ParentType, ContextType>; @@ -853,15 +1001,16 @@ export type GqlTraineeResolvers, ParentType, ContextType>; type?: Resolver; username?: Resolver; + email?: Resolver; + deleteAt?: Resolver, ParentType, ContextType>; + openReportsCount?: Resolver; + alexaSkillLinked?: Resolver, ParentType, ContextType>; __isTypeOf?: IsTypeOfResolverFn; }>; export type GqlTrainerResolvers = ResolversObject<{ - alexaSkillLinked?: Resolver, ParentType, ContextType>; avatar?: Resolver; createdAt?: Resolver; - deleteAt?: Resolver, ParentType, ContextType>; - email?: Resolver; firstName?: Resolver; id?: Resolver; language?: Resolver, ParentType, ContextType>; @@ -872,6 +1021,9 @@ export type GqlTrainerResolvers, ParentType, ContextType>; type?: Resolver; username?: Resolver; + email?: Resolver; + deleteAt?: Resolver, ParentType, ContextType>; + alexaSkillLinked?: Resolver, ParentType, ContextType>; __isTypeOf?: IsTypeOfResolverFn; }>; @@ -882,17 +1034,15 @@ export type GqlTrainerTraineePayloadResolvers; export type GqlUpdateReportPayloadResolvers = ResolversObject<{ - report?: Resolver; trainee?: Resolver; + report?: Resolver; __isTypeOf?: IsTypeOfResolverFn; }>; export type GqlUserInterfaceResolvers = ResolversObject<{ __resolveType: TypeResolveFn<'Admin' | 'Trainee' | 'Trainer', ParentType, ContextType>; - alexaSkillLinked?: Resolver, ParentType, ContextType>; avatar?: Resolver; createdAt?: Resolver; - email?: Resolver; firstName?: Resolver; id?: Resolver; language?: Resolver, ParentType, ContextType>; @@ -902,6 +1052,8 @@ export type GqlUserInterfaceResolvers, ParentType, ContextType>; type?: Resolver; username?: Resolver; + email?: Resolver; + alexaSkillLinked?: Resolver, ParentType, ContextType>; }>; export type GqlResolvers = ResolversObject<{ @@ -914,9 +1066,12 @@ export type GqlResolvers = ResolversObject<{ DevSetUserPayload?: GqlDevSetUserPayloadResolvers; Entry?: GqlEntryResolvers; LaraConfig?: GqlLaraConfigResolvers; + Mentor?: GqlMentorResolvers; MutateEntryPayload?: GqlMutateEntryPayloadResolvers; Mutation?: GqlMutationResolvers; OAuthPayload?: GqlOAuthPayloadResolvers; + Paper?: GqlPaperResolvers; + PaperFormData?: GqlPaperFormDataResolvers; PrintPayload?: GqlPrintPayloadResolvers; Query?: GqlQueryResolvers; Report?: GqlReportResolvers; @@ -927,3 +1082,4 @@ export type GqlResolvers = ResolversObject<{ UserInterface?: GqlUserInterfaceResolvers; }>; + diff --git a/packages/api/src/models.ts b/packages/api/src/models.ts index f5807b1..1ab7081 100644 --- a/packages/api/src/models.ts +++ b/packages/api/src/models.ts @@ -4,6 +4,7 @@ import { GqlCommentableInterface, GqlDay, GqlEntry, + GqlPaper, GqlReport, GqlTrainee, GqlTrainer, @@ -64,3 +65,7 @@ export type Report = Omit & { + traineeId: string +} diff --git a/packages/backend/src/db/env.ts b/packages/backend/src/db/env.ts index fc91715..dac9dfd 100644 --- a/packages/backend/src/db/env.ts +++ b/packages/backend/src/db/env.ts @@ -4,6 +4,7 @@ const { USER_TABLE, COMPANY_TABLE, REPORT_TABLE, + PAPER_TABLE, REPORT_WEEK_TRAINEEID_INDEX, REPORT_TRAINEEID_STATUS_INDEX, USER_TYPE_INDEX, @@ -24,6 +25,10 @@ if (!COMPANY_TABLE) { throw new Error('Missing Env Variable: "COMPANY_TABLE"') } +if (!PAPER_TABLE) { + throw new Error('Missing Env Variable: "PAPER_TABLE"') +} + if (!REPORT_WEEK_TRAINEEID_INDEX) { throw new Error('Missing Env Variable: "REPORT_WEEK_TRAINEEID_INDEX"') } @@ -52,6 +57,7 @@ if (!USER_OAUTH_CODE_INDEX) { export const userTableName = USER_TABLE export const companyTabelName = COMPANY_TABLE export const reportTableName = REPORT_TABLE +export const paperTableName = PAPER_TABLE // GSI's for the report table export const reportWeekTraineeIdIndex = REPORT_WEEK_TRAINEEID_INDEX diff --git a/packages/backend/src/repositories/paper.repo.ts b/packages/backend/src/repositories/paper.repo.ts new file mode 100644 index 0000000..24f8785 --- /dev/null +++ b/packages/backend/src/repositories/paper.repo.ts @@ -0,0 +1,19 @@ +import { Paper, Report } from '@lara/api' + +import { deleteItem, getItem, paperTableName, putItem, updateObject, UpdateObjectOptions } from '../db' + +export const updatePaper = async (updatedPaper: Paper, options: UpdateObjectOptions): Promise => { + return updateObject(paperTableName, updatedPaper, options) +} + +export const savePaper = (paper: Paper): Promise => { + return putItem(paperTableName, paper) +} + +export const deletePaper = async (paper: Paper): Promise => { + return deleteItem(paperTableName, { id: paper.id }) +} + +export const paperById = (id: string): Promise => { + return getItem(paperTableName, { id }) +} diff --git a/packages/backend/src/resolvers/paper.resolver.ts b/packages/backend/src/resolvers/paper.resolver.ts new file mode 100644 index 0000000..56a6f0d --- /dev/null +++ b/packages/backend/src/resolvers/paper.resolver.ts @@ -0,0 +1,18 @@ +import { GqlResolvers, BaseContext, TraineeContext } from '@lara/api' +import { GraphQLError } from 'graphql' +import { traineeById } from '../repositories/trainee.repo' + +export const paperResolver: GqlResolvers = { + Paper: { + trainee: async (model) => { + const trainee = await traineeById(model.traineeId) + if (!trainee) { + throw new GraphQLError('Wrong traineeId!') + } + + return trainee + }, + }, + Query: {}, + Mutation: {}, +} diff --git a/packages/frontend/src/graphql/index.tsx b/packages/frontend/src/graphql/index.tsx index 6af9264..2d89a2f 100644 --- a/packages/frontend/src/graphql/index.tsx +++ b/packages/frontend/src/graphql/index.tsx @@ -1,11 +1,10 @@ import { gql } from '@apollo/client'; import * as Apollo from '@apollo/client'; export type Maybe = T | undefined; -export type InputMaybe = T | undefined; export type Exact = { [K in keyof T]: T[K] }; export type MakeOptional = Omit & { [SubKey in K]?: Maybe }; export type MakeMaybe = Omit & { [SubKey in K]: Maybe }; -const defaultOptions = {} as const; +const defaultOptions = {} /** All built-in and custom scalars, mapped to their actual values */ export type Scalars = { ID: string; @@ -17,19 +16,25 @@ export type Scalars = { export type Admin = UserInterface & { __typename?: 'Admin'; - alexaSkillLinked?: Maybe; avatar: Scalars['String']; createdAt: Scalars['String']; - email: Scalars['String']; firstName: Scalars['String']; id: Scalars['ID']; language?: Maybe; lastName: Scalars['String']; notification?: Maybe; - signature?: Maybe; theme?: Maybe; type: UserTypeEnum; username: Scalars['String']; + email: Scalars['String']; + signature?: Maybe; + alexaSkillLinked?: Maybe; +}; + +export type AnswerPaperInput = { + id: Scalars['ID']; + questionId: Scalars['ID']; + answer: Scalars['String']; }; export type Comment = { @@ -60,13 +65,13 @@ export type CreateCommentPayload = { }; export type CreateTraineeInput = { - companyId: Scalars['String']; - email: Scalars['String']; - endDate: Scalars['String']; firstName: Scalars['String']; lastName: Scalars['String']; + email: Scalars['String']; startDate: Scalars['String']; + endDate: Scalars['String']; startOfToolUsage: Scalars['String']; + companyId: Scalars['String']; }; export type CreateTrainerInput = { @@ -86,16 +91,16 @@ export type Day = CommentableInterface & { }; export enum DayStatusEnum { + /** workday */ + Work = 'work', + /** vacation */ + Vacation = 'vacation', + /** sick leave */ + Sick = 'sick', /** school/university */ Education = 'education', /** public holiday */ - Holiday = 'holiday', - /** sick leave */ - Sick = 'sick', - /** vacation */ - Vacation = 'vacation', - /** workday */ - Work = 'work' + Holiday = 'holiday' } /** Autogenerated return type of DevSetUser */ @@ -121,14 +126,27 @@ export type EntryInput = { export type LaraConfig = { __typename?: 'LaraConfig'; + minWorkDayMinutes: Scalars['Int']; + maxWorkDayMinutes: Scalars['Int']; expectedWorkDayMinutes: Scalars['Int']; - finishedWeekDayCount: Scalars['Int']; + minEducationDayMinutes: Scalars['Int']; maxEducationDayMinutes: Scalars['Int']; maxEntryMinutes: Scalars['Int']; maxPeriodYearsCount: Scalars['Int']; - maxWorkDayMinutes: Scalars['Int']; - minEducationDayMinutes: Scalars['Int']; - minWorkDayMinutes: Scalars['Int']; + finishedWeekDayCount: Scalars['Int']; +}; + +export type Mentor = { + __typename?: 'Mentor'; + name: Scalars['String']; + email: Scalars['String']; + signature: Scalars['String']; +}; + +export type MentorInput = { + name?: Maybe; + email?: Maybe; + signature?: Maybe; }; export type MutateEntryPayload = { @@ -154,26 +172,12 @@ export type Mutation = { createCommentOnReport: CreateCommentPayload; /** Creates a new entry which is assigned to the matching report based on the day Id */ createEntry: MutateEntryPayload; - /** Create OAuth Code */ - createOAuthCode: Scalars['String']; - /** Creates Trainee. */ - createTrainee?: Maybe; - /** Creates Trainer. */ - createTrainer?: Maybe; /** Deletes an entry by the given ID. Only considers entries made by the current user. Returns the ID of the deleted entry. */ deleteEntry: MutateEntryPayload; - /** Link Alexa account */ - linkAlexa?: Maybe; /** Login via google. */ login?: Maybe; - /** Marks User to be deleted */ - markUserForDeletion?: Maybe; /** Unclaims a Trainee by the current Trainer */ unclaimTrainee?: Maybe; - /** Unlink Alexa account */ - unlinkAlexa?: Maybe; - /** Unmarks User from deletion */ - unmarkUserForDeletion?: Maybe; /** Updates the current trainee */ updateCurrentTrainee?: Maybe; /** Updates the current user */ @@ -184,10 +188,30 @@ export type Mutation = { updateEntryOrder: MutateEntryPayload; /** Updates report which is identified by the id argument. */ updateReport?: Maybe; + /** Creates Trainee. */ + createTrainee?: Maybe; + /** Creates Trainer. */ + createTrainer?: Maybe; + /** Marks User to be deleted */ + markUserForDeletion?: Maybe; + /** Unmarks User from deletion */ + unmarkUserForDeletion?: Maybe; /** Updates Trainee. */ updateTrainee?: Maybe; /** Updates Trainer. */ updateTrainer?: Maybe; + /** Link Alexa account */ + linkAlexa?: Maybe; + /** Unlink Alexa account */ + unlinkAlexa?: Maybe; + /** Create OAuth Code */ + createOAuthCode: Scalars['String']; + /** Create Paper */ + postPaper: Paper; + /** Delete Paper */ + deletePaper: Scalars['Boolean']; + /** Update Paper */ + answerPaper: PaperFormData; }; @@ -207,22 +231,22 @@ export type MutationClaimTraineeArgs = { export type MutationCreateCommentOnDayArgs = { - id: Scalars['ID']; text: Scalars['String']; + id: Scalars['ID']; traineeId: Scalars['ID']; }; export type MutationCreateCommentOnEntryArgs = { - id: Scalars['ID']; text: Scalars['String']; + id: Scalars['ID']; traineeId: Scalars['ID']; }; export type MutationCreateCommentOnReportArgs = { - id: Scalars['ID']; text: Scalars['String']; + id: Scalars['ID']; traineeId: Scalars['ID']; }; @@ -233,60 +257,34 @@ export type MutationCreateEntryArgs = { }; -export type MutationCreateTraineeArgs = { - input: CreateTraineeInput; -}; - - -export type MutationCreateTrainerArgs = { - input: CreateTrainerInput; -}; - - export type MutationDeleteEntryArgs = { id: Scalars['ID']; }; -export type MutationLinkAlexaArgs = { - code: Scalars['String']; - state: Scalars['String']; -}; - - export type MutationLoginArgs = { googleToken: Scalars['String']; }; -export type MutationMarkUserForDeletionArgs = { - id: Scalars['ID']; -}; - - export type MutationUnclaimTraineeArgs = { id: Scalars['ID']; }; -export type MutationUnmarkUserForDeletionArgs = { - id: Scalars['ID']; -}; - - export type MutationUpdateCurrentTraineeArgs = { input: UpdateCurrentTraineeInput; }; export type MutationUpdateCurrentUserArgs = { - input?: InputMaybe; + input?: Maybe; }; export type MutationUpdateDayArgs = { + status?: Maybe; id: Scalars['ID']; - status?: InputMaybe; }; @@ -297,38 +295,122 @@ export type MutationUpdateEntryArgs = { export type MutationUpdateEntryOrderArgs = { - dayId: Scalars['ID']; entryId: Scalars['ID']; + dayId: Scalars['ID']; orderId: Scalars['Int']; }; export type MutationUpdateReportArgs = { - department?: InputMaybe; + summary?: Maybe; + department?: Maybe; + status?: Maybe; id: Scalars['ID']; - status?: InputMaybe; - summary?: InputMaybe; }; -export type MutationUpdateTraineeArgs = { +export type MutationCreateTraineeArgs = { + input: CreateTraineeInput; +}; + + +export type MutationCreateTrainerArgs = { + input: CreateTrainerInput; +}; + + +export type MutationMarkUserForDeletionArgs = { + id: Scalars['ID']; +}; + + +export type MutationUnmarkUserForDeletionArgs = { id: Scalars['ID']; +}; + + +export type MutationUpdateTraineeArgs = { input: UpdateTraineeInput; + id: Scalars['ID']; }; export type MutationUpdateTrainerArgs = { - id: Scalars['ID']; input: UpdateTrainerInput; + id: Scalars['ID']; +}; + + +export type MutationLinkAlexaArgs = { + code: Scalars['String']; + state: Scalars['String']; +}; + + +export type MutationPostPaperArgs = { + input: PaperInput; + id?: Maybe; +}; + + +export type MutationDeletePaperArgs = { + id: Scalars['ID']; +}; + + +export type MutationAnswerPaperArgs = { + input: AnswerPaperInput; }; export type OAuthPayload = { __typename?: 'OAuthPayload'; accessToken: Scalars['String']; - expiresIn: Scalars['Int']; refreshToken?: Maybe; + expiresIn: Scalars['Int']; +}; + +export type Paper = { + __typename?: 'Paper'; + id: Scalars['ID']; + trainee: Trainee; + status: PaperStatus; + traineeForm: Array; + trainerForm: Array; + conclusion?: Maybe; + archivedAt?: Maybe; + createdAt: Scalars['String']; + client: Scalars['String']; + mentor: Mentor; + periodStart: Scalars['String']; + periodEnd: Scalars['String']; + subject: Scalars['String']; +}; + +export type PaperFormData = { + __typename?: 'PaperFormData'; + id: Scalars['ID']; + question: Scalars['String']; + answer?: Maybe; + hint?: Maybe; +}; + +export type PaperInput = { + client?: Maybe; + mentor?: Maybe; + periodStart?: Maybe; + periodEnd?: Maybe; + subject?: Maybe; + status?: Maybe; }; +export enum PaperStatus { + InProgress = 'InProgress', + TraineeDone = 'TraineeDone', + MentorDone = 'MentorDone', + InReview = 'InReview', + Archived = 'Archived' +} + export type PrintPayload = { __typename?: 'PrintPayload'; estimatedWaitingTime: Scalars['Int']; @@ -336,18 +418,10 @@ export type PrintPayload = { export type Query = { __typename?: 'Query'; - /** Get the alexa account linking url */ - alexaLinkingUrl?: Maybe; - /** Will look for Users to delete */ - cleanup: Scalars['Boolean']; - companies?: Maybe>; config: LaraConfig; + companies?: Maybe>; /** Returns the logged in user. This user can be either a Trainee or a Trainer. */ currentUser?: Maybe; - /** Get a User by ID */ - getUser?: Maybe; - /** Print single report or report batch */ - print: PrintPayload; /** Finds the report for a specifig trainee on the requested year and week. */ reportForTrainee?: Maybe; /** Finds the report for the requested year and week. */ @@ -360,34 +434,50 @@ export type Query = { trainees: Array; /** Get all Trainers */ trainers: Array; + /** Print single report or report batch */ + print: PrintPayload; + /** Get a User by ID */ + getUser?: Maybe; + /** Will look for Users to delete */ + cleanup: Scalars['Boolean']; + /** Get the alexa account linking url */ + alexaLinkingUrl?: Maybe; + /** Get the PAPER */ + getPaper?: Maybe; }; -export type QueryGetUserArgs = { +export type QueryReportForTraineeArgs = { + year: Scalars['Int']; + week: Scalars['Int']; id: Scalars['ID']; }; -export type QueryPrintArgs = { - ids: Array; +export type QueryReportForYearAndWeekArgs = { + year: Scalars['Int']; + week: Scalars['Int']; }; -export type QueryReportForTraineeArgs = { - id: Scalars['ID']; - week: Scalars['Int']; - year: Scalars['Int']; +export type QueryReportsArgs = { + statuses?: Maybe>; }; -export type QueryReportForYearAndWeekArgs = { - week: Scalars['Int']; - year: Scalars['Int']; +export type QueryPrintArgs = { + ids: Array; }; -export type QueryReportsArgs = { - statuses?: InputMaybe>; +export type QueryGetUserArgs = { + id: Scalars['ID']; +}; + + +export type QueryGetPaperArgs = { + id: Scalars['ID']; + token?: Maybe; }; export type Report = CommentableInterface & { @@ -397,37 +487,34 @@ export type Report = CommentableInterface & { days: Array; department?: Maybe; id: Scalars['ID']; - nextReportLink?: Maybe; - previousReportLink?: Maybe; - reportAccepted?: Maybe; status: ReportStatus; summary?: Maybe; week: Scalars['Int']; year: Scalars['Int']; + reportAccepted?: Maybe; + previousReportLink?: Maybe; + nextReportLink?: Maybe; }; /** Represents the current state of the report */ export enum ReportStatus { - /** Done reports are marked as archived */ - Archived = 'archived', - /** Used if there is any problem with a report */ - Reopened = 'reopened', + /** Report is open */ + Todo = 'todo', /** Passes the report to the trainer */ Review = 'review', - /** Report is open */ - Todo = 'todo' + /** Used if there is any problem with a report */ + Reopened = 'reopened', + /** Done reports are marked as archived */ + Archived = 'archived' } export type Trainee = UserInterface & { __typename?: 'Trainee'; - alexaSkillLinked?: Maybe; /** The url for the users avatar image. */ avatar: Scalars['String']; company: Company; course?: Maybe; createdAt: Scalars['String']; - deleteAt?: Maybe; - email: Scalars['String']; endDate?: Maybe; endOfToolUsage?: Maybe; firstName: Scalars['String']; @@ -435,7 +522,6 @@ export type Trainee = UserInterface & { language?: Maybe; lastName: Scalars['String']; notification?: Maybe; - openReportsCount: Scalars['Int']; reports: Array; signature?: Maybe; startDate?: Maybe; @@ -444,15 +530,16 @@ export type Trainee = UserInterface & { trainer?: Maybe; type: UserTypeEnum; username: Scalars['String']; + email: Scalars['String']; + deleteAt?: Maybe; + openReportsCount: Scalars['Int']; + alexaSkillLinked?: Maybe; }; export type Trainer = UserInterface & { __typename?: 'Trainer'; - alexaSkillLinked?: Maybe; avatar: Scalars['String']; createdAt: Scalars['String']; - deleteAt?: Maybe; - email: Scalars['String']; firstName: Scalars['String']; id: Scalars['ID']; language?: Maybe; @@ -463,6 +550,9 @@ export type Trainer = UserInterface & { trainees: Array; type: UserTypeEnum; username: Scalars['String']; + email: Scalars['String']; + deleteAt?: Maybe; + alexaSkillLinked?: Maybe; }; export type TrainerTraineePayload = { @@ -472,43 +562,41 @@ export type TrainerTraineePayload = { }; export type UpdateCurrentTraineeInput = { - course?: InputMaybe; + course?: Maybe; }; export type UpdateReportPayload = { __typename?: 'UpdateReportPayload'; - report: Report; trainee: Trainee; + report: Report; }; export type UpdateTraineeInput = { - companyId?: InputMaybe; - email?: InputMaybe; - endDate?: InputMaybe; - firstName?: InputMaybe; - lastName?: InputMaybe; - startDate?: InputMaybe; - startOfToolUsage?: InputMaybe; + firstName?: Maybe; + lastName?: Maybe; + email?: Maybe; + startDate?: Maybe; + endDate?: Maybe; + startOfToolUsage?: Maybe; + companyId?: Maybe; }; export type UpdateTrainerInput = { - email?: InputMaybe; - firstName?: InputMaybe; - lastName?: InputMaybe; + email?: Maybe; + firstName?: Maybe; + lastName?: Maybe; }; export type UserInput = { - language?: InputMaybe; - notification?: InputMaybe; - signature?: InputMaybe; - theme?: InputMaybe; + language?: Maybe; + theme?: Maybe; + signature?: Maybe; + notification?: Maybe; }; export type UserInterface = { - alexaSkillLinked?: Maybe; avatar: Scalars['String']; createdAt: Scalars['String']; - email: Scalars['String']; firstName: Scalars['String']; id: Scalars['ID']; language?: Maybe; @@ -518,32 +606,66 @@ export type UserInterface = { theme?: Maybe; type: UserTypeEnum; username: Scalars['String']; + email: Scalars['String']; + alexaSkillLinked?: Maybe; }; export enum UserTypeEnum { - /** User is an Admin */ - Admin = 'Admin', /** User is a Trainee */ Trainee = 'Trainee', /** User is a Trainer */ - Trainer = 'Trainer' + Trainer = 'Trainer', + /** User is an Admin */ + Admin = 'Admin' } export type ApplicationSettingsUpdateUserMutationVariables = Exact<{ - language?: InputMaybe; - theme?: InputMaybe; - notification?: InputMaybe; + language?: Maybe; + theme?: Maybe; + notification?: Maybe; }>; -export type ApplicationSettingsUpdateUserMutation = { __typename?: 'Mutation', updateCurrentUser?: { __typename: 'Admin', language?: string | undefined, theme?: string | undefined, notification?: boolean | undefined, id: string } | { __typename: 'Trainee', language?: string | undefined, theme?: string | undefined, notification?: boolean | undefined, id: string } | { __typename: 'Trainer', language?: string | undefined, theme?: string | undefined, notification?: boolean | undefined, id: string } | undefined }; +export type ApplicationSettingsUpdateUserMutation = ( + { __typename?: 'Mutation' } + & { updateCurrentUser?: Maybe<( + { __typename: 'Admin' } + & Pick + ) | ( + { __typename: 'Trainee' } + & Pick + ) | ( + { __typename: 'Trainer' } + & Pick + )> } +); export type ClaimTraineeMutationVariables = Exact<{ id: Scalars['ID']; }>; -export type ClaimTraineeMutation = { __typename?: 'Mutation', claimTrainee?: { __typename?: 'TrainerTraineePayload', trainee: { __typename?: 'Trainee', id: string, trainer?: { __typename?: 'Trainer', id: string } | undefined }, trainer: { __typename?: 'Trainer', id: string, trainees: Array<{ __typename?: 'Trainee', id: string }> } } | undefined }; +export type ClaimTraineeMutation = ( + { __typename?: 'Mutation' } + & { claimTrainee?: Maybe<( + { __typename?: 'TrainerTraineePayload' } + & { trainee: ( + { __typename?: 'Trainee' } + & Pick + & { trainer?: Maybe<( + { __typename?: 'Trainer' } + & Pick + )> } + ), trainer: ( + { __typename?: 'Trainer' } + & Pick + & { trainees: Array<( + { __typename?: 'Trainee' } + & Pick + )> } + ) } + )> } +); export type CreateCommentOnDayMutationVariables = Exact<{ id: Scalars['ID']; @@ -552,7 +674,30 @@ export type CreateCommentOnDayMutationVariables = Exact<{ }>; -export type CreateCommentOnDayMutation = { __typename?: 'Mutation', createCommentOnDay: { __typename?: 'CreateCommentPayload', commentable: { __typename?: 'Day', id: string, comments: Array<{ __typename?: 'Comment', id: string, text?: string | undefined, user: { __typename?: 'Admin', id: string, firstName: string, lastName: string, avatar: string } | { __typename?: 'Trainee', id: string, firstName: string, lastName: string, avatar: string } | { __typename?: 'Trainer', id: string, firstName: string, lastName: string, avatar: string } }> } | { __typename?: 'Entry' } | { __typename?: 'Report' } } }; +export type CreateCommentOnDayMutation = ( + { __typename?: 'Mutation' } + & { createCommentOnDay: ( + { __typename?: 'CreateCommentPayload' } + & { commentable: ( + { __typename?: 'Day' } + & Pick + & { comments: Array<( + { __typename?: 'Comment' } + & Pick + & { user: ( + { __typename?: 'Admin' } + & Pick + ) | ( + { __typename?: 'Trainee' } + & Pick + ) | ( + { __typename?: 'Trainer' } + & Pick + ) } + )> } + ) | { __typename?: 'Entry' } | { __typename?: 'Report' } } + ) } +); export type CreateCommentOnEntryMutationVariables = Exact<{ id: Scalars['ID']; @@ -561,7 +706,30 @@ export type CreateCommentOnEntryMutationVariables = Exact<{ }>; -export type CreateCommentOnEntryMutation = { __typename?: 'Mutation', createCommentOnEntry: { __typename?: 'CreateCommentPayload', commentable: { __typename?: 'Day' } | { __typename?: 'Entry', id: string, comments: Array<{ __typename?: 'Comment', id: string, text?: string | undefined, user: { __typename?: 'Admin', id: string, firstName: string, lastName: string, avatar: string } | { __typename?: 'Trainee', id: string, firstName: string, lastName: string, avatar: string } | { __typename?: 'Trainer', id: string, firstName: string, lastName: string, avatar: string } }> } | { __typename?: 'Report' } } }; +export type CreateCommentOnEntryMutation = ( + { __typename?: 'Mutation' } + & { createCommentOnEntry: ( + { __typename?: 'CreateCommentPayload' } + & { commentable: { __typename?: 'Day' } | ( + { __typename?: 'Entry' } + & Pick + & { comments: Array<( + { __typename?: 'Comment' } + & Pick + & { user: ( + { __typename?: 'Admin' } + & Pick + ) | ( + { __typename?: 'Trainee' } + & Pick + ) | ( + { __typename?: 'Trainer' } + & Pick + ) } + )> } + ) | { __typename?: 'Report' } } + ) } +); export type CreateCommentOnReportMutationVariables = Exact<{ id: Scalars['ID']; @@ -570,7 +738,30 @@ export type CreateCommentOnReportMutationVariables = Exact<{ }>; -export type CreateCommentOnReportMutation = { __typename?: 'Mutation', createCommentOnReport: { __typename?: 'CreateCommentPayload', commentable: { __typename?: 'Day' } | { __typename?: 'Entry' } | { __typename?: 'Report', id: string, comments: Array<{ __typename?: 'Comment', id: string, text?: string | undefined, user: { __typename?: 'Admin', id: string, firstName: string, lastName: string, avatar: string } | { __typename?: 'Trainee', id: string, firstName: string, lastName: string, avatar: string } | { __typename?: 'Trainer', id: string, firstName: string, lastName: string, avatar: string } }> } } }; +export type CreateCommentOnReportMutation = ( + { __typename?: 'Mutation' } + & { createCommentOnReport: ( + { __typename?: 'CreateCommentPayload' } + & { commentable: { __typename?: 'Day' } | { __typename?: 'Entry' } | ( + { __typename?: 'Report' } + & Pick + & { comments: Array<( + { __typename?: 'Comment' } + & Pick + & { user: ( + { __typename?: 'Admin' } + & Pick + ) | ( + { __typename?: 'Trainee' } + & Pick + ) | ( + { __typename?: 'Trainer' } + & Pick + ) } + )> } + ) } + ) } +); export type CreateEntryMutationVariables = Exact<{ dayId: Scalars['String']; @@ -578,55 +769,131 @@ export type CreateEntryMutationVariables = Exact<{ }>; -export type CreateEntryMutation = { __typename?: 'Mutation', createEntry: { __typename?: 'MutateEntryPayload', day: { __typename: 'Day', id: string, entries: Array<{ __typename?: 'Entry', id: string, text: string, time: number, orderId: number, comments: Array<{ __typename?: 'Comment', id: string }> }> } } }; +export type CreateEntryMutation = ( + { __typename?: 'Mutation' } + & { createEntry: ( + { __typename?: 'MutateEntryPayload' } + & { day: ( + { __typename: 'Day' } + & Pick + & { entries: Array<( + { __typename?: 'Entry' } + & Pick + & { comments: Array<( + { __typename?: 'Comment' } + & Pick + )> } + )> } + ) } + ) } +); export type CreateOAuthCodeMutationVariables = Exact<{ [key: string]: never; }>; -export type CreateOAuthCodeMutation = { __typename?: 'Mutation', createOAuthCode: string }; +export type CreateOAuthCodeMutation = ( + { __typename?: 'Mutation' } + & Pick +); export type CreateTraineeMutationVariables = Exact<{ input: CreateTraineeInput; }>; -export type CreateTraineeMutation = { __typename?: 'Mutation', createTrainee?: { __typename?: 'Trainee', id: string, startDate?: string | undefined, startOfToolUsage?: string | undefined, endDate?: string | undefined, course?: string | undefined, avatar: string, firstName: string, lastName: string, email: string, type: UserTypeEnum, deleteAt?: string | undefined, company: { __typename?: 'Company', id: string } } | undefined }; +export type CreateTraineeMutation = ( + { __typename?: 'Mutation' } + & { createTrainee?: Maybe<( + { __typename?: 'Trainee' } + & Pick + & { company: ( + { __typename?: 'Company' } + & Pick + ) } + )> } +); export type CreateTrainerMutationVariables = Exact<{ input: CreateTrainerInput; }>; -export type CreateTrainerMutation = { __typename?: 'Mutation', createTrainer?: { __typename?: 'Trainer', id: string, avatar: string, firstName: string, lastName: string, email: string, type: UserTypeEnum } | undefined }; +export type CreateTrainerMutation = ( + { __typename?: 'Mutation' } + & { createTrainer?: Maybe<( + { __typename?: 'Trainer' } + & Pick + )> } +); export type DayStatusSelectUpdateDayMutationVariables = Exact<{ id: Scalars['ID']; - status?: InputMaybe; + status?: Maybe; }>; -export type DayStatusSelectUpdateDayMutation = { __typename?: 'Mutation', updateDay?: { __typename: 'Day', id: string, status?: DayStatusEnum | undefined } | undefined }; +export type DayStatusSelectUpdateDayMutation = ( + { __typename?: 'Mutation' } + & { updateDay?: Maybe<( + { __typename: 'Day' } + & Pick + )> } +); export type DebugLoginMutationVariables = Exact<{ id: Scalars['String']; }>; -export type DebugLoginMutation = { __typename?: 'Mutation', _devloginuser?: { __typename?: 'OAuthPayload', accessToken: string, refreshToken?: string | undefined, expiresIn: number } | undefined }; +export type DebugLoginMutation = ( + { __typename?: 'Mutation' } + & { _devloginuser?: Maybe<( + { __typename?: 'OAuthPayload' } + & Pick + )> } +); export type DebugSetUsertypeMutationVariables = Exact<{ usertype: Scalars['String']; }>; -export type DebugSetUsertypeMutation = { __typename?: 'Mutation', _devsetusertype: { __typename?: 'DevSetUserPayload', user?: { __typename: 'Admin', id: string } | { __typename: 'Trainee', id: string } | { __typename: 'Trainer', id: string } | undefined } }; +export type DebugSetUsertypeMutation = ( + { __typename?: 'Mutation' } + & { _devsetusertype: ( + { __typename?: 'DevSetUserPayload' } + & { user?: Maybe<( + { __typename: 'Admin' } + & Pick + ) | ( + { __typename: 'Trainee' } + & Pick + ) | ( + { __typename: 'Trainer' } + & Pick + )> } + ) } +); export type DeleteEntryMutationVariables = Exact<{ id: Scalars['ID']; }>; -export type DeleteEntryMutation = { __typename?: 'Mutation', deleteEntry: { __typename?: 'MutateEntryPayload', day: { __typename: 'Day', id: string, entries: Array<{ __typename?: 'Entry', id: string }> } } }; +export type DeleteEntryMutation = ( + { __typename?: 'Mutation' } + & { deleteEntry: ( + { __typename?: 'MutateEntryPayload' } + & { day: ( + { __typename: 'Day' } + & Pick + & { entries: Array<( + { __typename?: 'Entry' } + & Pick + )> } + ) } + ) } +); export type LinkAlexaMutationVariables = Exact<{ code: Scalars['String']; @@ -634,54 +901,146 @@ export type LinkAlexaMutationVariables = Exact<{ }>; -export type LinkAlexaMutation = { __typename?: 'Mutation', linkAlexa?: { __typename?: 'Admin', id: string, alexaSkillLinked?: boolean | undefined } | { __typename?: 'Trainee', id: string, alexaSkillLinked?: boolean | undefined } | { __typename?: 'Trainer', id: string, alexaSkillLinked?: boolean | undefined } | undefined }; +export type LinkAlexaMutation = ( + { __typename?: 'Mutation' } + & { linkAlexa?: Maybe<( + { __typename?: 'Admin' } + & Pick + ) | ( + { __typename?: 'Trainee' } + & Pick + ) | ( + { __typename?: 'Trainer' } + & Pick + )> } +); export type LoginPageLoginMutationVariables = Exact<{ token: Scalars['String']; }>; -export type LoginPageLoginMutation = { __typename?: 'Mutation', login?: { __typename?: 'OAuthPayload', accessToken: string, refreshToken?: string | undefined, expiresIn: number } | undefined }; +export type LoginPageLoginMutation = ( + { __typename?: 'Mutation' } + & { login?: Maybe<( + { __typename?: 'OAuthPayload' } + & Pick + )> } +); export type MarkUserForDeleteMutationVariables = Exact<{ id: Scalars['ID']; }>; -export type MarkUserForDeleteMutation = { __typename?: 'Mutation', markUserForDeletion?: { __typename?: 'Admin', id: string } | { __typename?: 'Trainee', deleteAt?: string | undefined, id: string } | { __typename?: 'Trainer', deleteAt?: string | undefined, id: string } | undefined }; +export type MarkUserForDeleteMutation = ( + { __typename?: 'Mutation' } + & { markUserForDeletion?: Maybe<( + { __typename?: 'Admin' } + & Pick + ) | ( + { __typename?: 'Trainee' } + & Pick + ) | ( + { __typename?: 'Trainer' } + & Pick + )> } +); export type SignatureSettingsUpdateSignatureMutationVariables = Exact<{ - signature?: InputMaybe; + signature?: Maybe; }>; -export type SignatureSettingsUpdateSignatureMutation = { __typename?: 'Mutation', updateCurrentUser?: { __typename?: 'Admin', id: string, signature?: string | undefined } | { __typename?: 'Trainee', id: string, signature?: string | undefined } | { __typename?: 'Trainer', id: string, signature?: string | undefined } | undefined }; +export type SignatureSettingsUpdateSignatureMutation = ( + { __typename?: 'Mutation' } + & { updateCurrentUser?: Maybe<( + { __typename?: 'Admin' } + & Pick + ) | ( + { __typename?: 'Trainee' } + & Pick + ) | ( + { __typename?: 'Trainer' } + & Pick + )> } +); export type TraineeSettingsUpdateTraineeMutationVariables = Exact<{ - course?: InputMaybe; + course?: Maybe; }>; -export type TraineeSettingsUpdateTraineeMutation = { __typename?: 'Mutation', updateCurrentTrainee?: { __typename?: 'Trainee', id: string, course?: string | undefined } | undefined }; +export type TraineeSettingsUpdateTraineeMutation = ( + { __typename?: 'Mutation' } + & { updateCurrentTrainee?: Maybe<( + { __typename?: 'Trainee' } + & Pick + )> } +); export type UnclaimTraineeMutationVariables = Exact<{ id: Scalars['ID']; }>; -export type UnclaimTraineeMutation = { __typename?: 'Mutation', unclaimTrainee?: { __typename?: 'TrainerTraineePayload', trainee: { __typename?: 'Trainee', id: string, trainer?: { __typename?: 'Trainer', id: string } | undefined }, trainer: { __typename?: 'Trainer', id: string, trainees: Array<{ __typename?: 'Trainee', id: string }> } } | undefined }; +export type UnclaimTraineeMutation = ( + { __typename?: 'Mutation' } + & { unclaimTrainee?: Maybe<( + { __typename?: 'TrainerTraineePayload' } + & { trainee: ( + { __typename?: 'Trainee' } + & Pick + & { trainer?: Maybe<( + { __typename?: 'Trainer' } + & Pick + )> } + ), trainer: ( + { __typename?: 'Trainer' } + & Pick + & { trainees: Array<( + { __typename?: 'Trainee' } + & Pick + )> } + ) } + )> } +); export type UnlinkAlexaMutationVariables = Exact<{ [key: string]: never; }>; -export type UnlinkAlexaMutation = { __typename?: 'Mutation', unlinkAlexa?: { __typename?: 'Admin', id: string, alexaSkillLinked?: boolean | undefined } | { __typename?: 'Trainee', id: string, alexaSkillLinked?: boolean | undefined } | { __typename?: 'Trainer', id: string, alexaSkillLinked?: boolean | undefined } | undefined }; +export type UnlinkAlexaMutation = ( + { __typename?: 'Mutation' } + & { unlinkAlexa?: Maybe<( + { __typename?: 'Admin' } + & Pick + ) | ( + { __typename?: 'Trainee' } + & Pick + ) | ( + { __typename?: 'Trainer' } + & Pick + )> } +); export type UnmarkUserForDeleteMutationVariables = Exact<{ id: Scalars['ID']; }>; -export type UnmarkUserForDeleteMutation = { __typename?: 'Mutation', unmarkUserForDeletion?: { __typename?: 'Admin', id: string } | { __typename?: 'Trainee', deleteAt?: string | undefined, id: string } | { __typename?: 'Trainer', deleteAt?: string | undefined, id: string } | undefined }; +export type UnmarkUserForDeleteMutation = ( + { __typename?: 'Mutation' } + & { unmarkUserForDeletion?: Maybe<( + { __typename?: 'Admin' } + & Pick + ) | ( + { __typename?: 'Trainee' } + & Pick + ) | ( + { __typename?: 'Trainer' } + & Pick + )> } +); export type UpdateEntryOrderMutationVariables = Exact<{ entryId: Scalars['ID']; @@ -690,7 +1049,34 @@ export type UpdateEntryOrderMutationVariables = Exact<{ }>; -export type UpdateEntryOrderMutation = { __typename?: 'Mutation', updateEntryOrder: { __typename?: 'MutateEntryPayload', entry?: { __typename?: 'Entry', id: string, orderId: number } | undefined, day: { __typename?: 'Day', id: string, entries: Array<{ __typename?: 'Entry', id: string, orderId: number }> }, report: { __typename?: 'Report', id: string, days: Array<{ __typename?: 'Day', id: string, entries: Array<{ __typename?: 'Entry', id: string, orderId: number }> }> } } }; +export type UpdateEntryOrderMutation = ( + { __typename?: 'Mutation' } + & { updateEntryOrder: ( + { __typename?: 'MutateEntryPayload' } + & { entry?: Maybe<( + { __typename?: 'Entry' } + & Pick + )>, day: ( + { __typename?: 'Day' } + & Pick + & { entries: Array<( + { __typename?: 'Entry' } + & Pick + )> } + ), report: ( + { __typename?: 'Report' } + & Pick + & { days: Array<( + { __typename?: 'Day' } + & Pick + & { entries: Array<( + { __typename?: 'Entry' } + & Pick + )> } + )> } + ) } + ) } +); export type UpdateEntryMutationVariables = Exact<{ id: Scalars['ID']; @@ -698,27 +1084,57 @@ export type UpdateEntryMutationVariables = Exact<{ }>; -export type UpdateEntryMutation = { __typename?: 'Mutation', updateEntry: { __typename?: 'MutateEntryPayload', entry?: { __typename?: 'Entry', id: string, time: number, text: string } | undefined } }; +export type UpdateEntryMutation = ( + { __typename?: 'Mutation' } + & { updateEntry: ( + { __typename?: 'MutateEntryPayload' } + & { entry?: Maybe<( + { __typename?: 'Entry' } + & Pick + )> } + ) } +); export type UpdateReportReportReviewPageMutationVariables = Exact<{ id: Scalars['ID']; - summary?: InputMaybe; - department?: InputMaybe; - status?: InputMaybe; + summary?: Maybe; + department?: Maybe; + status?: Maybe; }>; -export type UpdateReportReportReviewPageMutation = { __typename?: 'Mutation', updateReport?: { __typename?: 'UpdateReportPayload', report: { __typename?: 'Report', id: string, summary?: string | undefined, department?: string | undefined, status: ReportStatus }, trainee: { __typename?: 'Trainee', id: string, openReportsCount: number } } | undefined }; +export type UpdateReportReportReviewPageMutation = ( + { __typename?: 'Mutation' } + & { updateReport?: Maybe<( + { __typename?: 'UpdateReportPayload' } + & { report: ( + { __typename?: 'Report' } + & Pick + ), trainee: ( + { __typename?: 'Trainee' } + & Pick + ) } + )> } +); export type UpdateReportMutationVariables = Exact<{ id: Scalars['ID']; - summary?: InputMaybe; - department?: InputMaybe; - status?: InputMaybe; + summary?: Maybe; + department?: Maybe; + status?: Maybe; }>; -export type UpdateReportMutation = { __typename?: 'Mutation', updateReport?: { __typename?: 'UpdateReportPayload', report: { __typename?: 'Report', id: string, summary?: string | undefined, department?: string | undefined, status: ReportStatus } } | undefined }; +export type UpdateReportMutation = ( + { __typename?: 'Mutation' } + & { updateReport?: Maybe<( + { __typename?: 'UpdateReportPayload' } + & { report: ( + { __typename?: 'Report' } + & Pick + ) } + )> } +); export type UpdateTraineeMutationVariables = Exact<{ input: UpdateTraineeInput; @@ -726,7 +1142,17 @@ export type UpdateTraineeMutationVariables = Exact<{ }>; -export type UpdateTraineeMutation = { __typename?: 'Mutation', updateTrainee?: { __typename?: 'Trainee', id: string, startDate?: string | undefined, startOfToolUsage?: string | undefined, endDate?: string | undefined, firstName: string, lastName: string, email: string, avatar: string, company: { __typename?: 'Company', id: string } } | undefined }; +export type UpdateTraineeMutation = ( + { __typename?: 'Mutation' } + & { updateTrainee?: Maybe<( + { __typename?: 'Trainee' } + & Pick + & { company: ( + { __typename?: 'Company' } + & Pick + ) } + )> } +); export type UpdateTrainerMutationVariables = Exact<{ input: UpdateTrainerInput; @@ -734,42 +1160,127 @@ export type UpdateTrainerMutationVariables = Exact<{ }>; -export type UpdateTrainerMutation = { __typename?: 'Mutation', updateTrainer?: { __typename?: 'Trainer', id: string, firstName: string, lastName: string, email: string, avatar: string, type: UserTypeEnum } | undefined }; +export type UpdateTrainerMutation = ( + { __typename?: 'Mutation' } + & { updateTrainer?: Maybe<( + { __typename?: 'Trainer' } + & Pick + )> } +); export type AdminTraineesPageQueryVariables = Exact<{ [key: string]: never; }>; -export type AdminTraineesPageQuery = { __typename?: 'Query', trainees: Array<{ __typename?: 'Trainee', id: string, firstName: string, lastName: string, avatar: string, deleteAt?: string | undefined }>, companies?: Array<{ __typename?: 'Company', id: string, name: string }> | undefined }; +export type AdminTraineesPageQuery = ( + { __typename?: 'Query' } + & { trainees: Array<( + { __typename?: 'Trainee' } + & Pick + )>, companies?: Maybe + )>> } +); export type AdminTrainersPageQueryVariables = Exact<{ [key: string]: never; }>; -export type AdminTrainersPageQuery = { __typename?: 'Query', trainers: Array<{ __typename?: 'Trainer', id: string, firstName: string, lastName: string, avatar: string, deleteAt?: string | undefined }> }; +export type AdminTrainersPageQuery = ( + { __typename?: 'Query' } + & { trainers: Array<( + { __typename?: 'Trainer' } + & Pick + )> } +); export type AlexaLinkingUrlQueryVariables = Exact<{ [key: string]: never; }>; -export type AlexaLinkingUrlQuery = { __typename?: 'Query', alexaLinkingUrl?: string | undefined }; +export type AlexaLinkingUrlQuery = ( + { __typename?: 'Query' } + & Pick +); export type ArchivePageDataQueryVariables = Exact<{ [key: string]: never; }>; -export type ArchivePageDataQuery = { __typename?: 'Query', currentUser?: { __typename?: 'Admin', id: string, theme?: string | undefined, firstName: string, lastName: string, language?: string | undefined } | { __typename?: 'Trainee', id: string, theme?: string | undefined, firstName: string, lastName: string, language?: string | undefined } | { __typename?: 'Trainer', id: string, theme?: string | undefined, firstName: string, lastName: string, language?: string | undefined } | undefined, reports: Array<{ __typename: 'Report', id: string, week: number, year: number, status: ReportStatus, department?: string | undefined, days: Array<{ __typename?: 'Day', status?: DayStatusEnum | undefined, entries: Array<{ __typename?: 'Entry', id: string, time: number }> }> } | undefined> }; +export type ArchivePageDataQuery = ( + { __typename?: 'Query' } + & { currentUser?: Maybe<( + { __typename?: 'Admin' } + & Pick + ) | ( + { __typename?: 'Trainee' } + & Pick + ) | ( + { __typename?: 'Trainer' } + & Pick + )>, reports: Array + & { days: Array<( + { __typename?: 'Day' } + & Pick + & { entries: Array<( + { __typename?: 'Entry' } + & Pick + )> } + )> } + )>> } +); export type CommentBoxDataQueryVariables = Exact<{ [key: string]: never; }>; -export type CommentBoxDataQuery = { __typename?: 'Query', currentUser?: { __typename?: 'Admin', id: string } | { __typename?: 'Trainee', id: string } | { __typename?: 'Trainer', id: string } | undefined }; +export type CommentBoxDataQuery = ( + { __typename?: 'Query' } + & { currentUser?: Maybe<( + { __typename?: 'Admin' } + & Pick + ) | ( + { __typename?: 'Trainee' } + & Pick + ) | ( + { __typename?: 'Trainer' } + & Pick + )> } +); export type ConfigQueryVariables = Exact<{ [key: string]: never; }>; -export type ConfigQuery = { __typename?: 'Query', config: { __typename?: 'LaraConfig', minWorkDayMinutes: number, maxWorkDayMinutes: number, expectedWorkDayMinutes: number, minEducationDayMinutes: number, maxEducationDayMinutes: number, maxEntryMinutes: number, maxPeriodYearsCount: number, finishedWeekDayCount: number } }; +export type ConfigQuery = ( + { __typename?: 'Query' } + & { config: ( + { __typename?: 'LaraConfig' } + & Pick + ) } +); export type CurrentUserQueryVariables = Exact<{ [key: string]: never; }>; -export type CurrentUserQuery = { __typename?: 'Query', currentUser?: { __typename?: 'Admin', id: string, language?: string | undefined, theme?: string | undefined, type: UserTypeEnum } | { __typename?: 'Trainee', startDate?: string | undefined, endDate?: string | undefined, course?: string | undefined, id: string, language?: string | undefined, theme?: string | undefined, type: UserTypeEnum, company: { __typename?: 'Company', id: string } } | { __typename?: 'Trainer', id: string, language?: string | undefined, theme?: string | undefined, type: UserTypeEnum, trainees: Array<{ __typename?: 'Trainee', id: string }> } | undefined }; +export type CurrentUserQuery = ( + { __typename?: 'Query' } + & { currentUser?: Maybe<( + { __typename?: 'Admin' } + & Pick + ) | ( + { __typename?: 'Trainee' } + & Pick + & { company: ( + { __typename?: 'Company' } + & Pick + ) } + ) | ( + { __typename?: 'Trainer' } + & Pick + & { trainees: Array<( + { __typename?: 'Trainee' } + & Pick + )> } + )> } +); export type DashboardPageDataQueryVariables = Exact<{ currentYear: Scalars['Int']; @@ -777,41 +1288,182 @@ export type DashboardPageDataQueryVariables = Exact<{ }>; -export type DashboardPageDataQuery = { __typename?: 'Query', currentUser?: { __typename?: 'Admin', id: string, theme?: string | undefined } | { __typename?: 'Trainee', id: string, theme?: string | undefined } | { __typename?: 'Trainer', id: string, theme?: string | undefined } | undefined, reports: Array<{ __typename: 'Report', id: string, week: number, year: number, status: ReportStatus, department?: string | undefined, days: Array<{ __typename?: 'Day', status?: DayStatusEnum | undefined, entries: Array<{ __typename?: 'Entry', id: string, time: number }> }> } | undefined>, reportForYearAndWeek?: { __typename?: 'Report', id: string, status: ReportStatus, days: Array<{ __typename?: 'Day', status?: DayStatusEnum | undefined, date: string, id: string, entries: Array<{ __typename?: 'Entry', id: string, text: string, time: number, orderId: number, comments: Array<{ __typename?: 'Comment', id: string, user: { __typename?: 'Admin', id: string, firstName: string, lastName: string, avatar: string } | { __typename?: 'Trainee', id: string, firstName: string, lastName: string, avatar: string } | { __typename?: 'Trainer', id: string, firstName: string, lastName: string, avatar: string } }> }>, comments: Array<{ __typename?: 'Comment', id: string, text?: string | undefined, user: { __typename?: 'Admin', id: string, firstName: string, lastName: string, avatar: string } | { __typename?: 'Trainee', id: string, firstName: string, lastName: string, avatar: string } | { __typename?: 'Trainer', id: string, firstName: string, lastName: string, avatar: string } }> }> } | undefined }; +export type DashboardPageDataQuery = ( + { __typename?: 'Query' } + & { currentUser?: Maybe<( + { __typename?: 'Admin' } + & Pick + ) | ( + { __typename?: 'Trainee' } + & Pick + ) | ( + { __typename?: 'Trainer' } + & Pick + )>, reports: Array + & { days: Array<( + { __typename?: 'Day' } + & Pick + & { entries: Array<( + { __typename?: 'Entry' } + & Pick + )> } + )> } + )>>, reportForYearAndWeek?: Maybe<( + { __typename?: 'Report' } + & Pick + & { days: Array<( + { __typename?: 'Day' } + & Pick + & { entries: Array<( + { __typename?: 'Entry' } + & Pick + & { comments: Array<( + { __typename?: 'Comment' } + & Pick + & { user: ( + { __typename?: 'Admin' } + & Pick + ) | ( + { __typename?: 'Trainee' } + & Pick + ) | ( + { __typename?: 'Trainer' } + & Pick + ) } + )> } + )>, comments: Array<( + { __typename?: 'Comment' } + & Pick + & { user: ( + { __typename?: 'Admin' } + & Pick + ) | ( + { __typename?: 'Trainee' } + & Pick + ) | ( + { __typename?: 'Trainer' } + & Pick + ) } + )> } + )> } + )> } +); export type DayInputDataQueryVariables = Exact<{ [key: string]: never; }>; -export type DayInputDataQuery = { __typename?: 'Query', currentUser?: { __typename?: 'Admin', id: string, firstName: string, lastName: string, avatar: string, type: UserTypeEnum } | { __typename?: 'Trainee', id: string, firstName: string, lastName: string, avatar: string, type: UserTypeEnum } | { __typename?: 'Trainer', id: string, firstName: string, lastName: string, avatar: string, type: UserTypeEnum } | undefined }; +export type DayInputDataQuery = ( + { __typename?: 'Query' } + & { currentUser?: Maybe<( + { __typename?: 'Admin' } + & Pick + ) | ( + { __typename?: 'Trainee' } + & Pick + ) | ( + { __typename?: 'Trainer' } + & Pick + )> } +); export type EntryInputDataQueryVariables = Exact<{ [key: string]: never; }>; -export type EntryInputDataQuery = { __typename?: 'Query', currentUser?: { __typename?: 'Admin', id: string, type: UserTypeEnum, firstName: string, lastName: string, avatar: string, username: string } | { __typename?: 'Trainee', id: string, type: UserTypeEnum, firstName: string, lastName: string, avatar: string, username: string } | { __typename?: 'Trainer', id: string, type: UserTypeEnum, firstName: string, lastName: string, avatar: string, username: string } | undefined }; +export type EntryInputDataQuery = ( + { __typename?: 'Query' } + & { currentUser?: Maybe<( + { __typename?: 'Admin' } + & Pick + ) | ( + { __typename?: 'Trainee' } + & Pick + ) | ( + { __typename?: 'Trainer' } + & Pick + )> } +); export type UserPageQueryVariables = Exact<{ id: Scalars['ID']; }>; -export type UserPageQuery = { __typename?: 'Query', getUser?: { __typename?: 'Admin', id: string, avatar: string, firstName: string, lastName: string, email: string, type: UserTypeEnum } | { __typename?: 'Trainee', startDate?: string | undefined, startOfToolUsage?: string | undefined, endDate?: string | undefined, deleteAt?: string | undefined, course?: string | undefined, id: string, avatar: string, firstName: string, lastName: string, email: string, type: UserTypeEnum, company: { __typename?: 'Company', id: string }, trainer?: { __typename?: 'Trainer', id: string, firstName: string, lastName: string, avatar: string } | undefined } | { __typename?: 'Trainer', deleteAt?: string | undefined, id: string, avatar: string, firstName: string, lastName: string, email: string, type: UserTypeEnum, trainees: Array<{ __typename?: 'Trainee', id: string, firstName: string, lastName: string, avatar: string }> } | undefined, companies?: Array<{ __typename?: 'Company', id: string, name: string }> | undefined }; +export type UserPageQuery = ( + { __typename?: 'Query' } + & { getUser?: Maybe<( + { __typename?: 'Admin' } + & Pick + ) | ( + { __typename?: 'Trainee' } + & Pick + & { company: ( + { __typename?: 'Company' } + & Pick + ), trainer?: Maybe<( + { __typename?: 'Trainer' } + & Pick + )> } + ) | ( + { __typename?: 'Trainer' } + & Pick + & { trainees: Array<( + { __typename?: 'Trainee' } + & Pick + )> } + )>, companies?: Maybe + )>> } +); export type NavigationDataQueryVariables = Exact<{ [key: string]: never; }>; -export type NavigationDataQuery = { __typename?: 'Query', currentUser?: { __typename: 'Admin', type: UserTypeEnum, id: string, firstName: string, lastName: string, avatar: string } | { __typename: 'Trainee', type: UserTypeEnum, id: string, firstName: string, lastName: string, avatar: string } | { __typename: 'Trainer', type: UserTypeEnum, id: string, firstName: string, lastName: string, avatar: string } | undefined }; +export type NavigationDataQuery = ( + { __typename?: 'Query' } + & { currentUser?: Maybe<( + { __typename: 'Admin' } + & Pick + ) | ( + { __typename: 'Trainee' } + & Pick + ) | ( + { __typename: 'Trainer' } + & Pick + )> } +); export type OnboardingPageDataQueryVariables = Exact<{ [key: string]: never; }>; -export type OnboardingPageDataQuery = { __typename?: 'Query', currentUser?: { __typename?: 'Admin', id: string, firstName: string } | { __typename?: 'Trainee', id: string, firstName: string } | { __typename?: 'Trainer', id: string, firstName: string } | undefined }; +export type OnboardingPageDataQuery = ( + { __typename?: 'Query' } + & { currentUser?: Maybe<( + { __typename?: 'Admin' } + & Pick + ) | ( + { __typename?: 'Trainee' } + & Pick + ) | ( + { __typename?: 'Trainer' } + & Pick + )> } +); export type PrintDataQueryVariables = Exact<{ ids: Array | Scalars['ID']; }>; -export type PrintDataQuery = { __typename?: 'Query', print: { __typename?: 'PrintPayload', estimatedWaitingTime: number } }; +export type PrintDataQuery = ( + { __typename?: 'Query' } + & { print: ( + { __typename?: 'PrintPayload' } + & Pick + ) } +); export type ReportPageDataQueryVariables = Exact<{ year: Scalars['Int']; @@ -819,7 +1471,70 @@ export type ReportPageDataQueryVariables = Exact<{ }>; -export type ReportPageDataQuery = { __typename?: 'Query', currentUser?: { __typename?: 'Admin', id: string, firstName: string, lastName: string, avatar: string, username: string } | { __typename?: 'Trainee', startOfToolUsage?: string | undefined, endOfToolUsage?: string | undefined, id: string, firstName: string, lastName: string, avatar: string, username: string } | { __typename?: 'Trainer', id: string, firstName: string, lastName: string, avatar: string, username: string } | undefined, reportForYearAndWeek?: { __typename?: 'Report', id: string, week: number, year: number, summary?: string | undefined, department?: string | undefined, status: ReportStatus, previousReportLink?: string | undefined, nextReportLink?: string | undefined, comments: Array<{ __typename?: 'Comment', id: string, text?: string | undefined, user: { __typename?: 'Admin', id: string, firstName: string, lastName: string, avatar: string } | { __typename?: 'Trainee', id: string, firstName: string, lastName: string, avatar: string } | { __typename?: 'Trainer', id: string, firstName: string, lastName: string, avatar: string } }>, days: Array<{ __typename?: 'Day', status?: DayStatusEnum | undefined, date: string, id: string, comments: Array<{ __typename?: 'Comment', id: string, text?: string | undefined, user: { __typename?: 'Admin', id: string, firstName: string, lastName: string, avatar: string } | { __typename?: 'Trainee', id: string, firstName: string, lastName: string, avatar: string } | { __typename?: 'Trainer', id: string, firstName: string, lastName: string, avatar: string } }>, entries: Array<{ __typename?: 'Entry', id: string, text: string, time: number, orderId: number, comments: Array<{ __typename?: 'Comment', id: string, text?: string | undefined, user: { __typename?: 'Admin', id: string, firstName: string, lastName: string, avatar: string } | { __typename?: 'Trainee', id: string, firstName: string, lastName: string, avatar: string } | { __typename?: 'Trainer', id: string, firstName: string, lastName: string, avatar: string } }> }> }> } | undefined }; +export type ReportPageDataQuery = ( + { __typename?: 'Query' } + & { currentUser?: Maybe<( + { __typename?: 'Admin' } + & Pick + ) | ( + { __typename?: 'Trainee' } + & Pick + ) | ( + { __typename?: 'Trainer' } + & Pick + )>, reportForYearAndWeek?: Maybe<( + { __typename?: 'Report' } + & Pick + & { comments: Array<( + { __typename?: 'Comment' } + & Pick + & { user: ( + { __typename?: 'Admin' } + & Pick + ) | ( + { __typename?: 'Trainee' } + & Pick + ) | ( + { __typename?: 'Trainer' } + & Pick + ) } + )>, days: Array<( + { __typename?: 'Day' } + & Pick + & { comments: Array<( + { __typename?: 'Comment' } + & Pick + & { user: ( + { __typename?: 'Admin' } + & Pick + ) | ( + { __typename?: 'Trainee' } + & Pick + ) | ( + { __typename?: 'Trainer' } + & Pick + ) } + )>, entries: Array<( + { __typename?: 'Entry' } + & Pick + & { comments: Array<( + { __typename?: 'Comment' } + & Pick + & { user: ( + { __typename?: 'Admin' } + & Pick + ) | ( + { __typename?: 'Trainee' } + & Pick + ) | ( + { __typename?: 'Trainer' } + & Pick + ) } + )> } + )> } + )> } + )> } +); export type ReportReviewPageDataQueryVariables = Exact<{ year: Scalars['Int']; @@ -828,42 +1543,204 @@ export type ReportReviewPageDataQueryVariables = Exact<{ }>; -export type ReportReviewPageDataQuery = { __typename?: 'Query', currentUser?: { __typename?: 'Admin', id: string, firstName: string, lastName: string, avatar: string, username: string } | { __typename?: 'Trainee', id: string, firstName: string, lastName: string, avatar: string, username: string } | { __typename?: 'Trainer', id: string, firstName: string, lastName: string, avatar: string, username: string } | undefined, reportForTrainee?: { __typename?: 'Report', id: string, week: number, year: number, summary?: string | undefined, department?: string | undefined, status: ReportStatus, comments: Array<{ __typename?: 'Comment', id: string, text?: string | undefined, user: { __typename?: 'Admin', id: string, firstName: string, lastName: string, avatar: string } | { __typename?: 'Trainee', id: string, firstName: string, lastName: string, avatar: string } | { __typename?: 'Trainer', id: string, firstName: string, lastName: string, avatar: string } }>, days: Array<{ __typename?: 'Day', status?: DayStatusEnum | undefined, date: string, id: string, entries: Array<{ __typename?: 'Entry', id: string, text: string, time: number, orderId: number, comments: Array<{ __typename?: 'Comment', id: string, text?: string | undefined, user: { __typename?: 'Admin', id: string, firstName: string, lastName: string, avatar: string } | { __typename?: 'Trainee', id: string, firstName: string, lastName: string, avatar: string } | { __typename?: 'Trainer', id: string, firstName: string, lastName: string, avatar: string } }> }>, comments: Array<{ __typename?: 'Comment', id: string, text?: string | undefined, user: { __typename?: 'Admin', id: string, firstName: string, lastName: string, avatar: string } | { __typename?: 'Trainee', id: string, firstName: string, lastName: string, avatar: string } | { __typename?: 'Trainer', id: string, firstName: string, lastName: string, avatar: string } }> }> } | undefined }; +export type ReportReviewPageDataQuery = ( + { __typename?: 'Query' } + & { currentUser?: Maybe<( + { __typename?: 'Admin' } + & Pick + ) | ( + { __typename?: 'Trainee' } + & Pick + ) | ( + { __typename?: 'Trainer' } + & Pick + )>, reportForTrainee?: Maybe<( + { __typename?: 'Report' } + & Pick + & { comments: Array<( + { __typename?: 'Comment' } + & Pick + & { user: ( + { __typename?: 'Admin' } + & Pick + ) | ( + { __typename?: 'Trainee' } + & Pick + ) | ( + { __typename?: 'Trainer' } + & Pick + ) } + )>, days: Array<( + { __typename?: 'Day' } + & Pick + & { entries: Array<( + { __typename?: 'Entry' } + & Pick + & { comments: Array<( + { __typename?: 'Comment' } + & Pick + & { user: ( + { __typename?: 'Admin' } + & Pick + ) | ( + { __typename?: 'Trainee' } + & Pick + ) | ( + { __typename?: 'Trainer' } + & Pick + ) } + )> } + )>, comments: Array<( + { __typename?: 'Comment' } + & Pick + & { user: ( + { __typename?: 'Admin' } + & Pick + ) | ( + { __typename?: 'Trainee' } + & Pick + ) | ( + { __typename?: 'Trainer' } + & Pick + ) } + )> } + )> } + )> } +); export type SettingsPageDataQueryVariables = Exact<{ [key: string]: never; }>; -export type SettingsPageDataQuery = { __typename?: 'Query', currentUser?: { __typename?: 'Admin', id: string, type: UserTypeEnum, language?: string | undefined, theme?: string | undefined, notification?: boolean | undefined } | { __typename?: 'Trainee', startDate?: string | undefined, endDate?: string | undefined, course?: string | undefined, alexaSkillLinked?: boolean | undefined, id: string, type: UserTypeEnum, language?: string | undefined, theme?: string | undefined, notification?: boolean | undefined, company: { __typename?: 'Company', id: string, name: string } } | { __typename?: 'Trainer', id: string, type: UserTypeEnum, language?: string | undefined, theme?: string | undefined, notification?: boolean | undefined } | undefined, companies?: Array<{ __typename?: 'Company', id: string, name: string }> | undefined }; +export type SettingsPageDataQuery = ( + { __typename?: 'Query' } + & { currentUser?: Maybe<( + { __typename?: 'Admin' } + & Pick + ) | ( + { __typename?: 'Trainee' } + & Pick + & { company: ( + { __typename?: 'Company' } + & Pick + ) } + ) | ( + { __typename?: 'Trainer' } + & Pick + )>, companies?: Maybe + )>> } +); export type SignatureSettingsDataQueryVariables = Exact<{ [key: string]: never; }>; -export type SignatureSettingsDataQuery = { __typename?: 'Query', currentUser?: { __typename?: 'Admin', id: string, signature?: string | undefined } | { __typename?: 'Trainee', id: string, signature?: string | undefined } | { __typename?: 'Trainer', id: string, signature?: string | undefined } | undefined }; +export type SignatureSettingsDataQuery = ( + { __typename?: 'Query' } + & { currentUser?: Maybe<( + { __typename?: 'Admin' } + & Pick + ) | ( + { __typename?: 'Trainee' } + & Pick + ) | ( + { __typename?: 'Trainer' } + & Pick + )> } +); export type SuggestionsDataQueryVariables = Exact<{ [key: string]: never; }>; -export type SuggestionsDataQuery = { __typename?: 'Query', suggestions: Array }; +export type SuggestionsDataQuery = ( + { __typename?: 'Query' } + & Pick +); export type TraineePageDataQueryVariables = Exact<{ [key: string]: never; }>; -export type TraineePageDataQuery = { __typename?: 'Query', trainees: Array<{ __typename?: 'Trainee', id: string, username: string, firstName: string, lastName: string, course?: string | undefined, avatar: string, startDate?: string | undefined, trainer?: { __typename?: 'Trainer', id: string, firstName: string, lastName: string } | undefined, company: { __typename?: 'Company', id: string, name: string } }>, currentUser?: { __typename?: 'Admin', id: string } | { __typename?: 'Trainee', id: string } | { __typename?: 'Trainer', id: string } | undefined }; +export type TraineePageDataQuery = ( + { __typename?: 'Query' } + & { trainees: Array<( + { __typename?: 'Trainee' } + & Pick + & { trainer?: Maybe<( + { __typename?: 'Trainer' } + & Pick + )>, company: ( + { __typename?: 'Company' } + & Pick + ) } + )>, currentUser?: Maybe<( + { __typename?: 'Admin' } + & Pick + ) | ( + { __typename?: 'Trainee' } + & Pick + ) | ( + { __typename?: 'Trainer' } + & Pick + )> } +); export type TraineeSettingsDataQueryVariables = Exact<{ [key: string]: never; }>; -export type TraineeSettingsDataQuery = { __typename?: 'Query', currentUser?: { __typename?: 'Admin' } | { __typename: 'Trainee', id: string, startDate?: string | undefined, endDate?: string | undefined, course?: string | undefined, company: { __typename?: 'Company', id: string, name: string }, trainer?: { __typename?: 'Trainer', firstName: string, lastName: string, avatar: string } | undefined } | { __typename?: 'Trainer' } | undefined }; +export type TraineeSettingsDataQuery = ( + { __typename?: 'Query' } + & { currentUser?: Maybe<{ __typename?: 'Admin' } | ( + { __typename: 'Trainee' } + & Pick + & { company: ( + { __typename?: 'Company' } + & Pick + ), trainer?: Maybe<( + { __typename?: 'Trainer' } + & Pick + )> } + ) | { __typename?: 'Trainer' }> } +); export type TrainerReportsPageDataQueryVariables = Exact<{ [key: string]: never; }>; -export type TrainerReportsPageDataQuery = { __typename?: 'Query', currentUser?: { __typename?: 'Admin', id: string, theme?: string | undefined } | { __typename?: 'Trainee', id: string, theme?: string | undefined } | { __typename?: 'Trainer', id: string, theme?: string | undefined, trainees: Array<{ __typename?: 'Trainee', username: string, firstName: string, lastName: string, id: string, avatar: string, openReportsCount: number, reports: Array<{ __typename?: 'Report', id: string, status: ReportStatus, week: number, year: number, days: Array<{ __typename?: 'Day', status?: DayStatusEnum | undefined }> }> }> } | undefined }; +export type TrainerReportsPageDataQuery = ( + { __typename?: 'Query' } + & { currentUser?: Maybe<( + { __typename?: 'Admin' } + & Pick + ) | ( + { __typename?: 'Trainee' } + & Pick + ) | ( + { __typename?: 'Trainer' } + & Pick + & { trainees: Array<( + { __typename?: 'Trainee' } + & Pick + & { reports: Array<( + { __typename?: 'Report' } + & Pick + & { days: Array<( + { __typename?: 'Day' } + & Pick + )> } + )> } + )> } + )> } +); export type TrainersPageQueryVariables = Exact<{ [key: string]: never; }>; -export type TrainersPageQuery = { __typename?: 'Query', trainers: Array<{ __typename?: 'Trainer', id: string, firstName: string, lastName: string, avatar: string }> }; +export type TrainersPageQuery = ( + { __typename?: 'Query' } + & { trainers: Array<( + { __typename?: 'Trainer' } + & Pick + )> } +); export const ApplicationSettingsUpdateUserDocument = gql` diff --git a/serverless.yml b/serverless.yml index 592c424..740b33a 100644 --- a/serverless.yml +++ b/serverless.yml @@ -65,6 +65,7 @@ custom: user: ${self:custom.stage}-lara-user-table report: ${self:custom.stage}-lara-report-table company: ${self:custom.stage}-lara-company-table + paper: ${self:custom.stage}-lara-paper-table lambda: print: ${self:service}-${self:custom.stage}-print email: ${self:service}-${self:custom.stage}-email @@ -134,6 +135,7 @@ functions: Resource: - 'arn:aws:dynamodb:${opt:region, self:provider.region}:*:table/${self:custom.config.table.company}' - 'arn:aws:dynamodb:${opt:region, self:provider.region}:*:table/${self:custom.config.table.company}/index/*' + - 'arn:aws:dynamodb:${opt:region, self:provider.region}:*:table/${self:custom.config.table.paper}' - 'arn:aws:dynamodb:${opt:region, self:provider.region}:*:table/${self:custom.config.table.user}' - 'arn:aws:dynamodb:${opt:region, self:provider.region}:*:table/${self:custom.config.table.user}/index/*' - 'arn:aws:dynamodb:${opt:region, self:provider.region}:*:table/${self:custom.config.table.report}' @@ -150,6 +152,7 @@ functions: USER_TABLE: ${self:custom.config.table.user} REPORT_TABLE: ${self:custom.config.table.report} COMPANY_TABLE: ${self:custom.config.table.company} + PAPER_TABLE: ${self:custom.config.table.paper} PRINT_FUNCTION: ${self:custom.config.lambda.print} EMAIL_FUNCTION: ${self:custom.config.lambda.email} REPORT_WEEK_TRAINEEID_INDEX: ${self:custom.config.gsi.reportWeekTraineeId} @@ -346,6 +349,19 @@ resources: BillingMode: PAY_PER_REQUEST TableName: ${self:custom.config.table.company} + PaperTable: + Type: 'AWS::DynamoDB::Table' + DeletionPolicy: Delete + Properties: + AttributeDefinitions: + - AttributeName: id + AttributeType: S + KeySchema: + - AttributeName: id + KeyType: HASH + BillingMode: PAY_PER_REQUEST + TableName: ${self:custom.config.table.paper} + AttachmentsBucket: Type: AWS::S3::Bucket Properties: From c7e374d4e2189a82049ba52efcbc75b9b5d705a2 Mon Sep 17 00:00:00 2001 From: Nikita Sarbaev Date: Tue, 18 Oct 2022 16:27:51 +0200 Subject: [PATCH 02/55] feat: initial commit --- packages/api/codegen.yml | 1 + packages/api/schema.gql | 78 + packages/api/src/context.ts | 2 +- packages/api/src/graphql.ts | 522 ++++--- packages/api/src/models.ts | 5 + packages/backend/src/db/env.ts | 6 + .../backend/src/repositories/paper.repo.ts | 19 + .../backend/src/resolvers/paper.resolver.ts | 18 + packages/frontend/src/graphql/index.tsx | 1259 ++++++++++++++--- serverless.yml | 16 + 10 files changed, 1551 insertions(+), 375 deletions(-) create mode 100644 packages/backend/src/repositories/paper.repo.ts create mode 100644 packages/backend/src/resolvers/paper.resolver.ts diff --git a/packages/api/codegen.yml b/packages/api/codegen.yml index e9fda41..9fc0692 100644 --- a/packages/api/codegen.yml +++ b/packages/api/codegen.yml @@ -22,3 +22,4 @@ generates: Trainer: ./models#Trainer Trainee: ./models#Trainee UserInterface: ./models#UserInterface + Paper: ./models#Paper diff --git a/packages/api/schema.gql b/packages/api/schema.gql index f89bc98..e5ed620 100644 --- a/packages/api/schema.gql +++ b/packages/api/schema.gql @@ -98,6 +98,27 @@ type UpdateReportPayload { report: Report! } +input MentorInput { + name: String + email: String + signature: String +} + +input PaperInput { + client: String + mentor: MentorInput + periodStart: String + periodEnd: String + subject: String + status: PaperStatus +} + +input AnswerPaperInput { + id: ID! + questionId: ID! + answer: String! +} + type Mutation { """ [DEV] Login as a user. @@ -215,6 +236,21 @@ type Mutation { Create OAuth Code """ createOAuthCode: String! + + """ + Create Paper + """ + postPaper(input: PaperInput!, id: ID): Paper! + + """ + Delete Paper + """ + deletePaper(id: ID!): Boolean! + + """ + Update Paper + """ + answerPaper(input: AnswerPaperInput!): PaperFormData! } type LaraConfig { @@ -291,6 +327,11 @@ type Query { Get the alexa account linking url """ alexaLinkingUrl: String + + """ + Get the PAPER + """ + getPaper(id: ID!, token: String): Paper } type PrintPayload { @@ -480,3 +521,40 @@ enum UserTypeEnum { """ Admin } + +enum PaperStatus { + InProgress + TraineeDone + MentorDone + InReview + Archived +} + +type PaperFormData { + id: ID! + question: String! + answer: String + hint: String +} + +type Mentor { + name: String! + email: String! + signature: String! +} + +type Paper { + id: ID! + trainee: Trainee! + status: PaperStatus! + traineeForm: [PaperFormData!]! + trainerForm: [PaperFormData!]! + conclusion: String + archivedAt: String + createdAt: String! + client: String! + mentor: Mentor! + periodStart: String! + periodEnd: String! + subject: String! +} diff --git a/packages/api/src/context.ts b/packages/api/src/context.ts index 9de45bb..929f1cf 100644 --- a/packages/api/src/context.ts +++ b/packages/api/src/context.ts @@ -8,7 +8,7 @@ type ExpressContext = { res: Response } -type BaseContext = { +export type BaseContext = { event: APIGatewayProxyEvent express: ExpressContext } diff --git a/packages/api/src/graphql.ts b/packages/api/src/graphql.ts index d30f8fa..e5274ff 100644 --- a/packages/api/src/graphql.ts +++ b/packages/api/src/graphql.ts @@ -1,13 +1,12 @@ import { GraphQLResolveInfo } from 'graphql'; -import { CommentableInterface, Comment, Entry, Day, Report, Trainer, Trainee, UserInterface } from './models'; +import { CommentableInterface, Comment, Entry, Day, Report, Trainer, Trainee, UserInterface, Paper } from './models'; import { Context } from './context'; export type Maybe = T | undefined; -export type InputMaybe = T | undefined; export type Exact = { [K in keyof T]: T[K] }; export type MakeOptional = Omit & { [SubKey in K]?: Maybe }; export type MakeMaybe = Omit & { [SubKey in K]: Maybe }; export type Omit = Pick>; -export type RequireFields = Omit & { [P in K]-?: NonNullable }; +export type RequireFields = { [X in Exclude]?: T[X] } & { [P in K]-?: NonNullable }; /** All built-in and custom scalars, mapped to their actual values */ export type Scalars = { ID: string; @@ -19,19 +18,25 @@ export type Scalars = { export type GqlAdmin = GqlUserInterface & { __typename?: 'Admin'; - alexaSkillLinked?: Maybe; avatar: Scalars['String']; createdAt: Scalars['String']; - email: Scalars['String']; firstName: Scalars['String']; id: Scalars['ID']; language?: Maybe; lastName: Scalars['String']; notification?: Maybe; - signature?: Maybe; theme?: Maybe; type: GqlUserTypeEnum; username: Scalars['String']; + email: Scalars['String']; + signature?: Maybe; + alexaSkillLinked?: Maybe; +}; + +export type GqlAnswerPaperInput = { + id: Scalars['ID']; + questionId: Scalars['ID']; + answer: Scalars['String']; }; export type GqlComment = { @@ -62,13 +67,13 @@ export type GqlCreateCommentPayload = { }; export type GqlCreateTraineeInput = { - companyId: Scalars['String']; - email: Scalars['String']; - endDate: Scalars['String']; firstName: Scalars['String']; lastName: Scalars['String']; + email: Scalars['String']; startDate: Scalars['String']; + endDate: Scalars['String']; startOfToolUsage: Scalars['String']; + companyId: Scalars['String']; }; export type GqlCreateTrainerInput = { @@ -88,16 +93,16 @@ export type GqlDay = GqlCommentableInterface & { }; export type GqlDayStatusEnum = + /** workday */ + | 'work' + /** vacation */ + | 'vacation' + /** sick leave */ + | 'sick' /** school/university */ | 'education' /** public holiday */ - | 'holiday' - /** sick leave */ - | 'sick' - /** vacation */ - | 'vacation' - /** workday */ - | 'work'; + | 'holiday'; /** Autogenerated return type of DevSetUser */ export type GqlDevSetUserPayload = { @@ -122,14 +127,27 @@ export type GqlEntryInput = { export type GqlLaraConfig = { __typename?: 'LaraConfig'; + minWorkDayMinutes: Scalars['Int']; + maxWorkDayMinutes: Scalars['Int']; expectedWorkDayMinutes: Scalars['Int']; - finishedWeekDayCount: Scalars['Int']; + minEducationDayMinutes: Scalars['Int']; maxEducationDayMinutes: Scalars['Int']; maxEntryMinutes: Scalars['Int']; maxPeriodYearsCount: Scalars['Int']; - maxWorkDayMinutes: Scalars['Int']; - minEducationDayMinutes: Scalars['Int']; - minWorkDayMinutes: Scalars['Int']; + finishedWeekDayCount: Scalars['Int']; +}; + +export type GqlMentor = { + __typename?: 'Mentor'; + name: Scalars['String']; + email: Scalars['String']; + signature: Scalars['String']; +}; + +export type GqlMentorInput = { + name?: Maybe; + email?: Maybe; + signature?: Maybe; }; export type GqlMutateEntryPayload = { @@ -155,26 +173,12 @@ export type GqlMutation = { createCommentOnReport: GqlCreateCommentPayload; /** Creates a new entry which is assigned to the matching report based on the day Id */ createEntry: GqlMutateEntryPayload; - /** Create OAuth Code */ - createOAuthCode: Scalars['String']; - /** Creates Trainee. */ - createTrainee?: Maybe; - /** Creates Trainer. */ - createTrainer?: Maybe; /** Deletes an entry by the given ID. Only considers entries made by the current user. Returns the ID of the deleted entry. */ deleteEntry: GqlMutateEntryPayload; - /** Link Alexa account */ - linkAlexa?: Maybe; /** Login via google. */ login?: Maybe; - /** Marks User to be deleted */ - markUserForDeletion?: Maybe; /** Unclaims a Trainee by the current Trainer */ unclaimTrainee?: Maybe; - /** Unlink Alexa account */ - unlinkAlexa?: Maybe; - /** Unmarks User from deletion */ - unmarkUserForDeletion?: Maybe; /** Updates the current trainee */ updateCurrentTrainee?: Maybe; /** Updates the current user */ @@ -185,10 +189,30 @@ export type GqlMutation = { updateEntryOrder: GqlMutateEntryPayload; /** Updates report which is identified by the id argument. */ updateReport?: Maybe; + /** Creates Trainee. */ + createTrainee?: Maybe; + /** Creates Trainer. */ + createTrainer?: Maybe; + /** Marks User to be deleted */ + markUserForDeletion?: Maybe; + /** Unmarks User from deletion */ + unmarkUserForDeletion?: Maybe; /** Updates Trainee. */ updateTrainee?: Maybe; /** Updates Trainer. */ updateTrainer?: Maybe; + /** Link Alexa account */ + linkAlexa?: Maybe; + /** Unlink Alexa account */ + unlinkAlexa?: Maybe; + /** Create OAuth Code */ + createOAuthCode: Scalars['String']; + /** Create Paper */ + postPaper: GqlPaper; + /** Delete Paper */ + deletePaper: Scalars['Boolean']; + /** Update Paper */ + answerPaper: GqlPaperFormData; }; @@ -208,22 +232,22 @@ export type GqlMutationClaimTraineeArgs = { export type GqlMutationCreateCommentOnDayArgs = { - id: Scalars['ID']; text: Scalars['String']; + id: Scalars['ID']; traineeId: Scalars['ID']; }; export type GqlMutationCreateCommentOnEntryArgs = { - id: Scalars['ID']; text: Scalars['String']; + id: Scalars['ID']; traineeId: Scalars['ID']; }; export type GqlMutationCreateCommentOnReportArgs = { - id: Scalars['ID']; text: Scalars['String']; + id: Scalars['ID']; traineeId: Scalars['ID']; }; @@ -234,60 +258,34 @@ export type GqlMutationCreateEntryArgs = { }; -export type GqlMutationCreateTraineeArgs = { - input: GqlCreateTraineeInput; -}; - - -export type GqlMutationCreateTrainerArgs = { - input: GqlCreateTrainerInput; -}; - - export type GqlMutationDeleteEntryArgs = { id: Scalars['ID']; }; -export type GqlMutationLinkAlexaArgs = { - code: Scalars['String']; - state: Scalars['String']; -}; - - export type GqlMutationLoginArgs = { googleToken: Scalars['String']; }; -export type GqlMutationMarkUserForDeletionArgs = { - id: Scalars['ID']; -}; - - export type GqlMutationUnclaimTraineeArgs = { id: Scalars['ID']; }; -export type GqlMutationUnmarkUserForDeletionArgs = { - id: Scalars['ID']; -}; - - export type GqlMutationUpdateCurrentTraineeArgs = { input: GqlUpdateCurrentTraineeInput; }; export type GqlMutationUpdateCurrentUserArgs = { - input?: InputMaybe; + input?: Maybe; }; export type GqlMutationUpdateDayArgs = { + status?: Maybe; id: Scalars['ID']; - status?: InputMaybe; }; @@ -298,38 +296,121 @@ export type GqlMutationUpdateEntryArgs = { export type GqlMutationUpdateEntryOrderArgs = { - dayId: Scalars['ID']; entryId: Scalars['ID']; + dayId: Scalars['ID']; orderId: Scalars['Int']; }; export type GqlMutationUpdateReportArgs = { - department?: InputMaybe; + summary?: Maybe; + department?: Maybe; + status?: Maybe; id: Scalars['ID']; - status?: InputMaybe; - summary?: InputMaybe; }; -export type GqlMutationUpdateTraineeArgs = { +export type GqlMutationCreateTraineeArgs = { + input: GqlCreateTraineeInput; +}; + + +export type GqlMutationCreateTrainerArgs = { + input: GqlCreateTrainerInput; +}; + + +export type GqlMutationMarkUserForDeletionArgs = { id: Scalars['ID']; +}; + + +export type GqlMutationUnmarkUserForDeletionArgs = { + id: Scalars['ID']; +}; + + +export type GqlMutationUpdateTraineeArgs = { input: GqlUpdateTraineeInput; + id: Scalars['ID']; }; export type GqlMutationUpdateTrainerArgs = { - id: Scalars['ID']; input: GqlUpdateTrainerInput; + id: Scalars['ID']; +}; + + +export type GqlMutationLinkAlexaArgs = { + code: Scalars['String']; + state: Scalars['String']; +}; + + +export type GqlMutationPostPaperArgs = { + input: GqlPaperInput; + id?: Maybe; +}; + + +export type GqlMutationDeletePaperArgs = { + id: Scalars['ID']; +}; + + +export type GqlMutationAnswerPaperArgs = { + input: GqlAnswerPaperInput; }; export type GqlOAuthPayload = { __typename?: 'OAuthPayload'; accessToken: Scalars['String']; - expiresIn: Scalars['Int']; refreshToken?: Maybe; + expiresIn: Scalars['Int']; }; +export type GqlPaper = { + __typename?: 'Paper'; + id: Scalars['ID']; + trainee: GqlTrainee; + status: GqlPaperStatus; + traineeForm: Array; + trainerForm: Array; + conclusion?: Maybe; + archivedAt?: Maybe; + createdAt: Scalars['String']; + client: Scalars['String']; + mentor: GqlMentor; + periodStart: Scalars['String']; + periodEnd: Scalars['String']; + subject: Scalars['String']; +}; + +export type GqlPaperFormData = { + __typename?: 'PaperFormData'; + id: Scalars['ID']; + question: Scalars['String']; + answer?: Maybe; + hint?: Maybe; +}; + +export type GqlPaperInput = { + client?: Maybe; + mentor?: Maybe; + periodStart?: Maybe; + periodEnd?: Maybe; + subject?: Maybe; + status?: Maybe; +}; + +export type GqlPaperStatus = + | 'InProgress' + | 'TraineeDone' + | 'MentorDone' + | 'InReview' + | 'Archived'; + export type GqlPrintPayload = { __typename?: 'PrintPayload'; estimatedWaitingTime: Scalars['Int']; @@ -337,18 +418,10 @@ export type GqlPrintPayload = { export type GqlQuery = { __typename?: 'Query'; - /** Get the alexa account linking url */ - alexaLinkingUrl?: Maybe; - /** Will look for Users to delete */ - cleanup: Scalars['Boolean']; - companies?: Maybe>; config: GqlLaraConfig; + companies?: Maybe>; /** Returns the logged in user. This user can be either a Trainee or a Trainer. */ currentUser?: Maybe; - /** Get a User by ID */ - getUser?: Maybe; - /** Print single report or report batch */ - print: GqlPrintPayload; /** Finds the report for a specifig trainee on the requested year and week. */ reportForTrainee?: Maybe; /** Finds the report for the requested year and week. */ @@ -361,34 +434,50 @@ export type GqlQuery = { trainees: Array; /** Get all Trainers */ trainers: Array; + /** Print single report or report batch */ + print: GqlPrintPayload; + /** Get a User by ID */ + getUser?: Maybe; + /** Will look for Users to delete */ + cleanup: Scalars['Boolean']; + /** Get the alexa account linking url */ + alexaLinkingUrl?: Maybe; + /** Get the PAPER */ + getPaper?: Maybe; }; -export type GqlQueryGetUserArgs = { +export type GqlQueryReportForTraineeArgs = { + year: Scalars['Int']; + week: Scalars['Int']; id: Scalars['ID']; }; -export type GqlQueryPrintArgs = { - ids: Array; +export type GqlQueryReportForYearAndWeekArgs = { + year: Scalars['Int']; + week: Scalars['Int']; }; -export type GqlQueryReportForTraineeArgs = { - id: Scalars['ID']; - week: Scalars['Int']; - year: Scalars['Int']; +export type GqlQueryReportsArgs = { + statuses?: Maybe>; }; -export type GqlQueryReportForYearAndWeekArgs = { - week: Scalars['Int']; - year: Scalars['Int']; +export type GqlQueryPrintArgs = { + ids: Array; }; -export type GqlQueryReportsArgs = { - statuses?: InputMaybe>; +export type GqlQueryGetUserArgs = { + id: Scalars['ID']; +}; + + +export type GqlQueryGetPaperArgs = { + id: Scalars['ID']; + token?: Maybe; }; export type GqlReport = GqlCommentableInterface & { @@ -398,36 +487,33 @@ export type GqlReport = GqlCommentableInterface & { days: Array; department?: Maybe; id: Scalars['ID']; - nextReportLink?: Maybe; - previousReportLink?: Maybe; - reportAccepted?: Maybe; status: GqlReportStatus; summary?: Maybe; week: Scalars['Int']; year: Scalars['Int']; + reportAccepted?: Maybe; + previousReportLink?: Maybe; + nextReportLink?: Maybe; }; /** Represents the current state of the report */ export type GqlReportStatus = - /** Done reports are marked as archived */ - | 'archived' - /** Used if there is any problem with a report */ - | 'reopened' + /** Report is open */ + | 'todo' /** Passes the report to the trainer */ | 'review' - /** Report is open */ - | 'todo'; + /** Used if there is any problem with a report */ + | 'reopened' + /** Done reports are marked as archived */ + | 'archived'; export type GqlTrainee = GqlUserInterface & { __typename?: 'Trainee'; - alexaSkillLinked?: Maybe; /** The url for the users avatar image. */ avatar: Scalars['String']; company: GqlCompany; course?: Maybe; createdAt: Scalars['String']; - deleteAt?: Maybe; - email: Scalars['String']; endDate?: Maybe; endOfToolUsage?: Maybe; firstName: Scalars['String']; @@ -435,7 +521,6 @@ export type GqlTrainee = GqlUserInterface & { language?: Maybe; lastName: Scalars['String']; notification?: Maybe; - openReportsCount: Scalars['Int']; reports: Array; signature?: Maybe; startDate?: Maybe; @@ -444,15 +529,16 @@ export type GqlTrainee = GqlUserInterface & { trainer?: Maybe; type: GqlUserTypeEnum; username: Scalars['String']; + email: Scalars['String']; + deleteAt?: Maybe; + openReportsCount: Scalars['Int']; + alexaSkillLinked?: Maybe; }; export type GqlTrainer = GqlUserInterface & { __typename?: 'Trainer'; - alexaSkillLinked?: Maybe; avatar: Scalars['String']; createdAt: Scalars['String']; - deleteAt?: Maybe; - email: Scalars['String']; firstName: Scalars['String']; id: Scalars['ID']; language?: Maybe; @@ -463,6 +549,9 @@ export type GqlTrainer = GqlUserInterface & { trainees: Array; type: GqlUserTypeEnum; username: Scalars['String']; + email: Scalars['String']; + deleteAt?: Maybe; + alexaSkillLinked?: Maybe; }; export type GqlTrainerTraineePayload = { @@ -472,43 +561,41 @@ export type GqlTrainerTraineePayload = { }; export type GqlUpdateCurrentTraineeInput = { - course?: InputMaybe; + course?: Maybe; }; export type GqlUpdateReportPayload = { __typename?: 'UpdateReportPayload'; - report: GqlReport; trainee: GqlTrainee; + report: GqlReport; }; export type GqlUpdateTraineeInput = { - companyId?: InputMaybe; - email?: InputMaybe; - endDate?: InputMaybe; - firstName?: InputMaybe; - lastName?: InputMaybe; - startDate?: InputMaybe; - startOfToolUsage?: InputMaybe; + firstName?: Maybe; + lastName?: Maybe; + email?: Maybe; + startDate?: Maybe; + endDate?: Maybe; + startOfToolUsage?: Maybe; + companyId?: Maybe; }; export type GqlUpdateTrainerInput = { - email?: InputMaybe; - firstName?: InputMaybe; - lastName?: InputMaybe; + email?: Maybe; + firstName?: Maybe; + lastName?: Maybe; }; export type GqlUserInput = { - language?: InputMaybe; - notification?: InputMaybe; - signature?: InputMaybe; - theme?: InputMaybe; + language?: Maybe; + theme?: Maybe; + signature?: Maybe; + notification?: Maybe; }; export type GqlUserInterface = { - alexaSkillLinked?: Maybe; avatar: Scalars['String']; createdAt: Scalars['String']; - email: Scalars['String']; firstName: Scalars['String']; id: Scalars['ID']; language?: Maybe; @@ -518,15 +605,17 @@ export type GqlUserInterface = { theme?: Maybe; type: GqlUserTypeEnum; username: Scalars['String']; + email: Scalars['String']; + alexaSkillLinked?: Maybe; }; export type GqlUserTypeEnum = - /** User is an Admin */ - | 'Admin' /** User is a Trainee */ | 'Trainee' /** User is a Trainer */ - | 'Trainer'; + | 'Trainer' + /** User is an Admin */ + | 'Admin'; export type WithIndex = TObject & Record; export type ResolversObject = WithIndex; @@ -537,7 +626,21 @@ export type ResolverTypeWrapper = Promise | T; export type ResolverWithResolve = { resolve: ResolverFn; }; -export type Resolver = ResolverFn | ResolverWithResolve; + +export type LegacyStitchingResolver = { + fragment: string; + resolve: ResolverFn; +}; + +export type NewStitchingResolver = { + selectionSet: string; + resolve: ResolverFn; +}; +export type StitchingResolver = LegacyStitchingResolver | NewStitchingResolver; +export type Resolver = + | ResolverFn + | ResolverWithResolve + | StitchingResolver; export type ResolverFn = ( parent: TParent, @@ -551,7 +654,7 @@ export type SubscriptionSubscribeFn = ( args: TArgs, context: TContext, info: GraphQLResolveInfo -) => AsyncIterable | Promise>; +) => AsyncIterator | Promise>; export type SubscriptionResolveFn = ( parent: TParent, @@ -599,7 +702,10 @@ export type DirectiveResolverFn; + String: ResolverTypeWrapper; + ID: ResolverTypeWrapper; Boolean: ResolverTypeWrapper; + AnswerPaperInput: GqlAnswerPaperInput; Comment: ResolverTypeWrapper; CommentableInterface: ResolverTypeWrapper; Company: ResolverTypeWrapper; @@ -610,23 +716,27 @@ export type GqlResolversTypes = ResolversObject<{ DayStatusEnum: GqlDayStatusEnum; DevSetUserPayload: ResolverTypeWrapper & { user?: Maybe }>; Entry: ResolverTypeWrapper; - EntryInput: GqlEntryInput; - ID: ResolverTypeWrapper; Int: ResolverTypeWrapper; + EntryInput: GqlEntryInput; LaraConfig: ResolverTypeWrapper; + Mentor: ResolverTypeWrapper; + MentorInput: GqlMentorInput; MutateEntryPayload: ResolverTypeWrapper & { day: GqlResolversTypes['Day'], entry?: Maybe, report: GqlResolversTypes['Report'] }>; Mutation: ResolverTypeWrapper<{}>; OAuthPayload: ResolverTypeWrapper; + Paper: ResolverTypeWrapper; + PaperFormData: ResolverTypeWrapper; + PaperInput: GqlPaperInput; + PaperStatus: GqlPaperStatus; PrintPayload: ResolverTypeWrapper; Query: ResolverTypeWrapper<{}>; Report: ResolverTypeWrapper; ReportStatus: GqlReportStatus; - String: ResolverTypeWrapper; Trainee: ResolverTypeWrapper; Trainer: ResolverTypeWrapper; TrainerTraineePayload: ResolverTypeWrapper & { trainee: GqlResolversTypes['Trainee'], trainer: GqlResolversTypes['Trainer'] }>; UpdateCurrentTraineeInput: GqlUpdateCurrentTraineeInput; - UpdateReportPayload: ResolverTypeWrapper & { report: GqlResolversTypes['Report'], trainee: GqlResolversTypes['Trainee'] }>; + UpdateReportPayload: ResolverTypeWrapper & { trainee: GqlResolversTypes['Trainee'], report: GqlResolversTypes['Report'] }>; UpdateTraineeInput: GqlUpdateTraineeInput; UpdateTrainerInput: GqlUpdateTrainerInput; UserInput: GqlUserInput; @@ -637,7 +747,10 @@ export type GqlResolversTypes = ResolversObject<{ /** Mapping between all available schema types and the resolvers parents */ export type GqlResolversParentTypes = ResolversObject<{ Admin: GqlAdmin; + String: Scalars['String']; + ID: Scalars['ID']; Boolean: Scalars['Boolean']; + AnswerPaperInput: GqlAnswerPaperInput; Comment: Comment; CommentableInterface: CommentableInterface; Company: GqlCompany; @@ -647,22 +760,25 @@ export type GqlResolversParentTypes = ResolversObject<{ Day: Day; DevSetUserPayload: Omit & { user?: Maybe }; Entry: Entry; - EntryInput: GqlEntryInput; - ID: Scalars['ID']; Int: Scalars['Int']; + EntryInput: GqlEntryInput; LaraConfig: GqlLaraConfig; + Mentor: GqlMentor; + MentorInput: GqlMentorInput; MutateEntryPayload: Omit & { day: GqlResolversParentTypes['Day'], entry?: Maybe, report: GqlResolversParentTypes['Report'] }; Mutation: {}; OAuthPayload: GqlOAuthPayload; + Paper: Paper; + PaperFormData: GqlPaperFormData; + PaperInput: GqlPaperInput; PrintPayload: GqlPrintPayload; Query: {}; Report: Report; - String: Scalars['String']; Trainee: Trainee; Trainer: Trainer; TrainerTraineePayload: Omit & { trainee: GqlResolversParentTypes['Trainee'], trainer: GqlResolversParentTypes['Trainer'] }; UpdateCurrentTraineeInput: GqlUpdateCurrentTraineeInput; - UpdateReportPayload: Omit & { report: GqlResolversParentTypes['Report'], trainee: GqlResolversParentTypes['Trainee'] }; + UpdateReportPayload: Omit & { trainee: GqlResolversParentTypes['Trainee'], report: GqlResolversParentTypes['Report'] }; UpdateTraineeInput: GqlUpdateTraineeInput; UpdateTrainerInput: GqlUpdateTrainerInput; UserInput: GqlUserInput; @@ -670,19 +786,19 @@ export type GqlResolversParentTypes = ResolversObject<{ }>; export type GqlAdminResolvers = ResolversObject<{ - alexaSkillLinked?: Resolver, ParentType, ContextType>; avatar?: Resolver; createdAt?: Resolver; - email?: Resolver; firstName?: Resolver; id?: Resolver; language?: Resolver, ParentType, ContextType>; lastName?: Resolver; notification?: Resolver, ParentType, ContextType>; - signature?: Resolver, ParentType, ContextType>; theme?: Resolver, ParentType, ContextType>; type?: Resolver; username?: Resolver; + email?: Resolver; + signature?: Resolver, ParentType, ContextType>; + alexaSkillLinked?: Resolver, ParentType, ContextType>; __isTypeOf?: IsTypeOfResolverFn; }>; @@ -739,14 +855,21 @@ export type GqlEntryResolvers; export type GqlLaraConfigResolvers = ResolversObject<{ + minWorkDayMinutes?: Resolver; + maxWorkDayMinutes?: Resolver; expectedWorkDayMinutes?: Resolver; - finishedWeekDayCount?: Resolver; + minEducationDayMinutes?: Resolver; maxEducationDayMinutes?: Resolver; maxEntryMinutes?: Resolver; maxPeriodYearsCount?: Resolver; - maxWorkDayMinutes?: Resolver; - minEducationDayMinutes?: Resolver; - minWorkDayMinutes?: Resolver; + finishedWeekDayCount?: Resolver; + __isTypeOf?: IsTypeOfResolverFn; +}>; + +export type GqlMentorResolvers = ResolversObject<{ + name?: Resolver; + email?: Resolver; + signature?: Resolver; __isTypeOf?: IsTypeOfResolverFn; }>; @@ -761,34 +884,62 @@ export type GqlMutationResolvers, ParentType, ContextType, RequireFields>; _devsetusertype?: Resolver>; claimTrainee?: Resolver, ParentType, ContextType, RequireFields>; - createCommentOnDay?: Resolver>; - createCommentOnEntry?: Resolver>; - createCommentOnReport?: Resolver>; + createCommentOnDay?: Resolver>; + createCommentOnEntry?: Resolver>; + createCommentOnReport?: Resolver>; createEntry?: Resolver>; - createOAuthCode?: Resolver; - createTrainee?: Resolver, ParentType, ContextType, RequireFields>; - createTrainer?: Resolver, ParentType, ContextType, RequireFields>; deleteEntry?: Resolver>; - linkAlexa?: Resolver, ParentType, ContextType, RequireFields>; login?: Resolver, ParentType, ContextType, RequireFields>; - markUserForDeletion?: Resolver, ParentType, ContextType, RequireFields>; unclaimTrainee?: Resolver, ParentType, ContextType, RequireFields>; - unlinkAlexa?: Resolver, ParentType, ContextType>; - unmarkUserForDeletion?: Resolver, ParentType, ContextType, RequireFields>; updateCurrentTrainee?: Resolver, ParentType, ContextType, RequireFields>; - updateCurrentUser?: Resolver, ParentType, ContextType, Partial>; + updateCurrentUser?: Resolver, ParentType, ContextType, RequireFields>; updateDay?: Resolver, ParentType, ContextType, RequireFields>; updateEntry?: Resolver>; - updateEntryOrder?: Resolver>; + updateEntryOrder?: Resolver>; updateReport?: Resolver, ParentType, ContextType, RequireFields>; - updateTrainee?: Resolver, ParentType, ContextType, RequireFields>; - updateTrainer?: Resolver, ParentType, ContextType, RequireFields>; + createTrainee?: Resolver, ParentType, ContextType, RequireFields>; + createTrainer?: Resolver, ParentType, ContextType, RequireFields>; + markUserForDeletion?: Resolver, ParentType, ContextType, RequireFields>; + unmarkUserForDeletion?: Resolver, ParentType, ContextType, RequireFields>; + updateTrainee?: Resolver, ParentType, ContextType, RequireFields>; + updateTrainer?: Resolver, ParentType, ContextType, RequireFields>; + linkAlexa?: Resolver, ParentType, ContextType, RequireFields>; + unlinkAlexa?: Resolver, ParentType, ContextType>; + createOAuthCode?: Resolver; + postPaper?: Resolver>; + deletePaper?: Resolver>; + answerPaper?: Resolver>; }>; export type GqlOAuthPayloadResolvers = ResolversObject<{ accessToken?: Resolver; - expiresIn?: Resolver; refreshToken?: Resolver, ParentType, ContextType>; + expiresIn?: Resolver; + __isTypeOf?: IsTypeOfResolverFn; +}>; + +export type GqlPaperResolvers = ResolversObject<{ + id?: Resolver; + trainee?: Resolver; + status?: Resolver; + traineeForm?: Resolver, ParentType, ContextType>; + trainerForm?: Resolver, ParentType, ContextType>; + conclusion?: Resolver, ParentType, ContextType>; + archivedAt?: Resolver, ParentType, ContextType>; + createdAt?: Resolver; + client?: Resolver; + mentor?: Resolver; + periodStart?: Resolver; + periodEnd?: Resolver; + subject?: Resolver; + __isTypeOf?: IsTypeOfResolverFn; +}>; + +export type GqlPaperFormDataResolvers = ResolversObject<{ + id?: Resolver; + question?: Resolver; + answer?: Resolver, ParentType, ContextType>; + hint?: Resolver, ParentType, ContextType>; __isTypeOf?: IsTypeOfResolverFn; }>; @@ -798,19 +949,20 @@ export type GqlPrintPayloadResolvers; export type GqlQueryResolvers = ResolversObject<{ - alexaLinkingUrl?: Resolver, ParentType, ContextType>; - cleanup?: Resolver; - companies?: Resolver>, ParentType, ContextType>; config?: Resolver; + companies?: Resolver>, ParentType, ContextType>; currentUser?: Resolver, ParentType, ContextType>; - getUser?: Resolver, ParentType, ContextType, RequireFields>; - print?: Resolver>; - reportForTrainee?: Resolver, ParentType, ContextType, RequireFields>; - reportForYearAndWeek?: Resolver, ParentType, ContextType, RequireFields>; - reports?: Resolver>, ParentType, ContextType, Partial>; + reportForTrainee?: Resolver, ParentType, ContextType, RequireFields>; + reportForYearAndWeek?: Resolver, ParentType, ContextType, RequireFields>; + reports?: Resolver>, ParentType, ContextType, RequireFields>; suggestions?: Resolver, ParentType, ContextType>; trainees?: Resolver, ParentType, ContextType>; trainers?: Resolver, ParentType, ContextType>; + print?: Resolver>; + getUser?: Resolver, ParentType, ContextType, RequireFields>; + cleanup?: Resolver; + alexaLinkingUrl?: Resolver, ParentType, ContextType>; + getPaper?: Resolver, ParentType, ContextType, RequireFields>; }>; export type GqlReportResolvers = ResolversObject<{ @@ -819,24 +971,21 @@ export type GqlReportResolvers, ParentType, ContextType>; department?: Resolver, ParentType, ContextType>; id?: Resolver; - nextReportLink?: Resolver, ParentType, ContextType>; - previousReportLink?: Resolver, ParentType, ContextType>; - reportAccepted?: Resolver, ParentType, ContextType>; status?: Resolver; summary?: Resolver, ParentType, ContextType>; week?: Resolver; year?: Resolver; + reportAccepted?: Resolver, ParentType, ContextType>; + previousReportLink?: Resolver, ParentType, ContextType>; + nextReportLink?: Resolver, ParentType, ContextType>; __isTypeOf?: IsTypeOfResolverFn; }>; export type GqlTraineeResolvers = ResolversObject<{ - alexaSkillLinked?: Resolver, ParentType, ContextType>; avatar?: Resolver; company?: Resolver; course?: Resolver, ParentType, ContextType>; createdAt?: Resolver; - deleteAt?: Resolver, ParentType, ContextType>; - email?: Resolver; endDate?: Resolver, ParentType, ContextType>; endOfToolUsage?: Resolver, ParentType, ContextType>; firstName?: Resolver; @@ -844,7 +993,6 @@ export type GqlTraineeResolvers, ParentType, ContextType>; lastName?: Resolver; notification?: Resolver, ParentType, ContextType>; - openReportsCount?: Resolver; reports?: Resolver, ParentType, ContextType>; signature?: Resolver, ParentType, ContextType>; startDate?: Resolver, ParentType, ContextType>; @@ -853,15 +1001,16 @@ export type GqlTraineeResolvers, ParentType, ContextType>; type?: Resolver; username?: Resolver; + email?: Resolver; + deleteAt?: Resolver, ParentType, ContextType>; + openReportsCount?: Resolver; + alexaSkillLinked?: Resolver, ParentType, ContextType>; __isTypeOf?: IsTypeOfResolverFn; }>; export type GqlTrainerResolvers = ResolversObject<{ - alexaSkillLinked?: Resolver, ParentType, ContextType>; avatar?: Resolver; createdAt?: Resolver; - deleteAt?: Resolver, ParentType, ContextType>; - email?: Resolver; firstName?: Resolver; id?: Resolver; language?: Resolver, ParentType, ContextType>; @@ -872,6 +1021,9 @@ export type GqlTrainerResolvers, ParentType, ContextType>; type?: Resolver; username?: Resolver; + email?: Resolver; + deleteAt?: Resolver, ParentType, ContextType>; + alexaSkillLinked?: Resolver, ParentType, ContextType>; __isTypeOf?: IsTypeOfResolverFn; }>; @@ -882,17 +1034,15 @@ export type GqlTrainerTraineePayloadResolvers; export type GqlUpdateReportPayloadResolvers = ResolversObject<{ - report?: Resolver; trainee?: Resolver; + report?: Resolver; __isTypeOf?: IsTypeOfResolverFn; }>; export type GqlUserInterfaceResolvers = ResolversObject<{ __resolveType: TypeResolveFn<'Admin' | 'Trainee' | 'Trainer', ParentType, ContextType>; - alexaSkillLinked?: Resolver, ParentType, ContextType>; avatar?: Resolver; createdAt?: Resolver; - email?: Resolver; firstName?: Resolver; id?: Resolver; language?: Resolver, ParentType, ContextType>; @@ -902,6 +1052,8 @@ export type GqlUserInterfaceResolvers, ParentType, ContextType>; type?: Resolver; username?: Resolver; + email?: Resolver; + alexaSkillLinked?: Resolver, ParentType, ContextType>; }>; export type GqlResolvers = ResolversObject<{ @@ -914,9 +1066,12 @@ export type GqlResolvers = ResolversObject<{ DevSetUserPayload?: GqlDevSetUserPayloadResolvers; Entry?: GqlEntryResolvers; LaraConfig?: GqlLaraConfigResolvers; + Mentor?: GqlMentorResolvers; MutateEntryPayload?: GqlMutateEntryPayloadResolvers; Mutation?: GqlMutationResolvers; OAuthPayload?: GqlOAuthPayloadResolvers; + Paper?: GqlPaperResolvers; + PaperFormData?: GqlPaperFormDataResolvers; PrintPayload?: GqlPrintPayloadResolvers; Query?: GqlQueryResolvers; Report?: GqlReportResolvers; @@ -927,3 +1082,4 @@ export type GqlResolvers = ResolversObject<{ UserInterface?: GqlUserInterfaceResolvers; }>; + diff --git a/packages/api/src/models.ts b/packages/api/src/models.ts index f5807b1..1ab7081 100644 --- a/packages/api/src/models.ts +++ b/packages/api/src/models.ts @@ -4,6 +4,7 @@ import { GqlCommentableInterface, GqlDay, GqlEntry, + GqlPaper, GqlReport, GqlTrainee, GqlTrainer, @@ -64,3 +65,7 @@ export type Report = Omit & { + traineeId: string +} diff --git a/packages/backend/src/db/env.ts b/packages/backend/src/db/env.ts index fc91715..dac9dfd 100644 --- a/packages/backend/src/db/env.ts +++ b/packages/backend/src/db/env.ts @@ -4,6 +4,7 @@ const { USER_TABLE, COMPANY_TABLE, REPORT_TABLE, + PAPER_TABLE, REPORT_WEEK_TRAINEEID_INDEX, REPORT_TRAINEEID_STATUS_INDEX, USER_TYPE_INDEX, @@ -24,6 +25,10 @@ if (!COMPANY_TABLE) { throw new Error('Missing Env Variable: "COMPANY_TABLE"') } +if (!PAPER_TABLE) { + throw new Error('Missing Env Variable: "PAPER_TABLE"') +} + if (!REPORT_WEEK_TRAINEEID_INDEX) { throw new Error('Missing Env Variable: "REPORT_WEEK_TRAINEEID_INDEX"') } @@ -52,6 +57,7 @@ if (!USER_OAUTH_CODE_INDEX) { export const userTableName = USER_TABLE export const companyTabelName = COMPANY_TABLE export const reportTableName = REPORT_TABLE +export const paperTableName = PAPER_TABLE // GSI's for the report table export const reportWeekTraineeIdIndex = REPORT_WEEK_TRAINEEID_INDEX diff --git a/packages/backend/src/repositories/paper.repo.ts b/packages/backend/src/repositories/paper.repo.ts new file mode 100644 index 0000000..24f8785 --- /dev/null +++ b/packages/backend/src/repositories/paper.repo.ts @@ -0,0 +1,19 @@ +import { Paper, Report } from '@lara/api' + +import { deleteItem, getItem, paperTableName, putItem, updateObject, UpdateObjectOptions } from '../db' + +export const updatePaper = async (updatedPaper: Paper, options: UpdateObjectOptions): Promise => { + return updateObject(paperTableName, updatedPaper, options) +} + +export const savePaper = (paper: Paper): Promise => { + return putItem(paperTableName, paper) +} + +export const deletePaper = async (paper: Paper): Promise => { + return deleteItem(paperTableName, { id: paper.id }) +} + +export const paperById = (id: string): Promise => { + return getItem(paperTableName, { id }) +} diff --git a/packages/backend/src/resolvers/paper.resolver.ts b/packages/backend/src/resolvers/paper.resolver.ts new file mode 100644 index 0000000..56a6f0d --- /dev/null +++ b/packages/backend/src/resolvers/paper.resolver.ts @@ -0,0 +1,18 @@ +import { GqlResolvers, BaseContext, TraineeContext } from '@lara/api' +import { GraphQLError } from 'graphql' +import { traineeById } from '../repositories/trainee.repo' + +export const paperResolver: GqlResolvers = { + Paper: { + trainee: async (model) => { + const trainee = await traineeById(model.traineeId) + if (!trainee) { + throw new GraphQLError('Wrong traineeId!') + } + + return trainee + }, + }, + Query: {}, + Mutation: {}, +} diff --git a/packages/frontend/src/graphql/index.tsx b/packages/frontend/src/graphql/index.tsx index 6af9264..2d89a2f 100644 --- a/packages/frontend/src/graphql/index.tsx +++ b/packages/frontend/src/graphql/index.tsx @@ -1,11 +1,10 @@ import { gql } from '@apollo/client'; import * as Apollo from '@apollo/client'; export type Maybe = T | undefined; -export type InputMaybe = T | undefined; export type Exact = { [K in keyof T]: T[K] }; export type MakeOptional = Omit & { [SubKey in K]?: Maybe }; export type MakeMaybe = Omit & { [SubKey in K]: Maybe }; -const defaultOptions = {} as const; +const defaultOptions = {} /** All built-in and custom scalars, mapped to their actual values */ export type Scalars = { ID: string; @@ -17,19 +16,25 @@ export type Scalars = { export type Admin = UserInterface & { __typename?: 'Admin'; - alexaSkillLinked?: Maybe; avatar: Scalars['String']; createdAt: Scalars['String']; - email: Scalars['String']; firstName: Scalars['String']; id: Scalars['ID']; language?: Maybe; lastName: Scalars['String']; notification?: Maybe; - signature?: Maybe; theme?: Maybe; type: UserTypeEnum; username: Scalars['String']; + email: Scalars['String']; + signature?: Maybe; + alexaSkillLinked?: Maybe; +}; + +export type AnswerPaperInput = { + id: Scalars['ID']; + questionId: Scalars['ID']; + answer: Scalars['String']; }; export type Comment = { @@ -60,13 +65,13 @@ export type CreateCommentPayload = { }; export type CreateTraineeInput = { - companyId: Scalars['String']; - email: Scalars['String']; - endDate: Scalars['String']; firstName: Scalars['String']; lastName: Scalars['String']; + email: Scalars['String']; startDate: Scalars['String']; + endDate: Scalars['String']; startOfToolUsage: Scalars['String']; + companyId: Scalars['String']; }; export type CreateTrainerInput = { @@ -86,16 +91,16 @@ export type Day = CommentableInterface & { }; export enum DayStatusEnum { + /** workday */ + Work = 'work', + /** vacation */ + Vacation = 'vacation', + /** sick leave */ + Sick = 'sick', /** school/university */ Education = 'education', /** public holiday */ - Holiday = 'holiday', - /** sick leave */ - Sick = 'sick', - /** vacation */ - Vacation = 'vacation', - /** workday */ - Work = 'work' + Holiday = 'holiday' } /** Autogenerated return type of DevSetUser */ @@ -121,14 +126,27 @@ export type EntryInput = { export type LaraConfig = { __typename?: 'LaraConfig'; + minWorkDayMinutes: Scalars['Int']; + maxWorkDayMinutes: Scalars['Int']; expectedWorkDayMinutes: Scalars['Int']; - finishedWeekDayCount: Scalars['Int']; + minEducationDayMinutes: Scalars['Int']; maxEducationDayMinutes: Scalars['Int']; maxEntryMinutes: Scalars['Int']; maxPeriodYearsCount: Scalars['Int']; - maxWorkDayMinutes: Scalars['Int']; - minEducationDayMinutes: Scalars['Int']; - minWorkDayMinutes: Scalars['Int']; + finishedWeekDayCount: Scalars['Int']; +}; + +export type Mentor = { + __typename?: 'Mentor'; + name: Scalars['String']; + email: Scalars['String']; + signature: Scalars['String']; +}; + +export type MentorInput = { + name?: Maybe; + email?: Maybe; + signature?: Maybe; }; export type MutateEntryPayload = { @@ -154,26 +172,12 @@ export type Mutation = { createCommentOnReport: CreateCommentPayload; /** Creates a new entry which is assigned to the matching report based on the day Id */ createEntry: MutateEntryPayload; - /** Create OAuth Code */ - createOAuthCode: Scalars['String']; - /** Creates Trainee. */ - createTrainee?: Maybe; - /** Creates Trainer. */ - createTrainer?: Maybe; /** Deletes an entry by the given ID. Only considers entries made by the current user. Returns the ID of the deleted entry. */ deleteEntry: MutateEntryPayload; - /** Link Alexa account */ - linkAlexa?: Maybe; /** Login via google. */ login?: Maybe; - /** Marks User to be deleted */ - markUserForDeletion?: Maybe; /** Unclaims a Trainee by the current Trainer */ unclaimTrainee?: Maybe; - /** Unlink Alexa account */ - unlinkAlexa?: Maybe; - /** Unmarks User from deletion */ - unmarkUserForDeletion?: Maybe; /** Updates the current trainee */ updateCurrentTrainee?: Maybe; /** Updates the current user */ @@ -184,10 +188,30 @@ export type Mutation = { updateEntryOrder: MutateEntryPayload; /** Updates report which is identified by the id argument. */ updateReport?: Maybe; + /** Creates Trainee. */ + createTrainee?: Maybe; + /** Creates Trainer. */ + createTrainer?: Maybe; + /** Marks User to be deleted */ + markUserForDeletion?: Maybe; + /** Unmarks User from deletion */ + unmarkUserForDeletion?: Maybe; /** Updates Trainee. */ updateTrainee?: Maybe; /** Updates Trainer. */ updateTrainer?: Maybe; + /** Link Alexa account */ + linkAlexa?: Maybe; + /** Unlink Alexa account */ + unlinkAlexa?: Maybe; + /** Create OAuth Code */ + createOAuthCode: Scalars['String']; + /** Create Paper */ + postPaper: Paper; + /** Delete Paper */ + deletePaper: Scalars['Boolean']; + /** Update Paper */ + answerPaper: PaperFormData; }; @@ -207,22 +231,22 @@ export type MutationClaimTraineeArgs = { export type MutationCreateCommentOnDayArgs = { - id: Scalars['ID']; text: Scalars['String']; + id: Scalars['ID']; traineeId: Scalars['ID']; }; export type MutationCreateCommentOnEntryArgs = { - id: Scalars['ID']; text: Scalars['String']; + id: Scalars['ID']; traineeId: Scalars['ID']; }; export type MutationCreateCommentOnReportArgs = { - id: Scalars['ID']; text: Scalars['String']; + id: Scalars['ID']; traineeId: Scalars['ID']; }; @@ -233,60 +257,34 @@ export type MutationCreateEntryArgs = { }; -export type MutationCreateTraineeArgs = { - input: CreateTraineeInput; -}; - - -export type MutationCreateTrainerArgs = { - input: CreateTrainerInput; -}; - - export type MutationDeleteEntryArgs = { id: Scalars['ID']; }; -export type MutationLinkAlexaArgs = { - code: Scalars['String']; - state: Scalars['String']; -}; - - export type MutationLoginArgs = { googleToken: Scalars['String']; }; -export type MutationMarkUserForDeletionArgs = { - id: Scalars['ID']; -}; - - export type MutationUnclaimTraineeArgs = { id: Scalars['ID']; }; -export type MutationUnmarkUserForDeletionArgs = { - id: Scalars['ID']; -}; - - export type MutationUpdateCurrentTraineeArgs = { input: UpdateCurrentTraineeInput; }; export type MutationUpdateCurrentUserArgs = { - input?: InputMaybe; + input?: Maybe; }; export type MutationUpdateDayArgs = { + status?: Maybe; id: Scalars['ID']; - status?: InputMaybe; }; @@ -297,38 +295,122 @@ export type MutationUpdateEntryArgs = { export type MutationUpdateEntryOrderArgs = { - dayId: Scalars['ID']; entryId: Scalars['ID']; + dayId: Scalars['ID']; orderId: Scalars['Int']; }; export type MutationUpdateReportArgs = { - department?: InputMaybe; + summary?: Maybe; + department?: Maybe; + status?: Maybe; id: Scalars['ID']; - status?: InputMaybe; - summary?: InputMaybe; }; -export type MutationUpdateTraineeArgs = { +export type MutationCreateTraineeArgs = { + input: CreateTraineeInput; +}; + + +export type MutationCreateTrainerArgs = { + input: CreateTrainerInput; +}; + + +export type MutationMarkUserForDeletionArgs = { + id: Scalars['ID']; +}; + + +export type MutationUnmarkUserForDeletionArgs = { id: Scalars['ID']; +}; + + +export type MutationUpdateTraineeArgs = { input: UpdateTraineeInput; + id: Scalars['ID']; }; export type MutationUpdateTrainerArgs = { - id: Scalars['ID']; input: UpdateTrainerInput; + id: Scalars['ID']; +}; + + +export type MutationLinkAlexaArgs = { + code: Scalars['String']; + state: Scalars['String']; +}; + + +export type MutationPostPaperArgs = { + input: PaperInput; + id?: Maybe; +}; + + +export type MutationDeletePaperArgs = { + id: Scalars['ID']; +}; + + +export type MutationAnswerPaperArgs = { + input: AnswerPaperInput; }; export type OAuthPayload = { __typename?: 'OAuthPayload'; accessToken: Scalars['String']; - expiresIn: Scalars['Int']; refreshToken?: Maybe; + expiresIn: Scalars['Int']; +}; + +export type Paper = { + __typename?: 'Paper'; + id: Scalars['ID']; + trainee: Trainee; + status: PaperStatus; + traineeForm: Array; + trainerForm: Array; + conclusion?: Maybe; + archivedAt?: Maybe; + createdAt: Scalars['String']; + client: Scalars['String']; + mentor: Mentor; + periodStart: Scalars['String']; + periodEnd: Scalars['String']; + subject: Scalars['String']; +}; + +export type PaperFormData = { + __typename?: 'PaperFormData'; + id: Scalars['ID']; + question: Scalars['String']; + answer?: Maybe; + hint?: Maybe; +}; + +export type PaperInput = { + client?: Maybe; + mentor?: Maybe; + periodStart?: Maybe; + periodEnd?: Maybe; + subject?: Maybe; + status?: Maybe; }; +export enum PaperStatus { + InProgress = 'InProgress', + TraineeDone = 'TraineeDone', + MentorDone = 'MentorDone', + InReview = 'InReview', + Archived = 'Archived' +} + export type PrintPayload = { __typename?: 'PrintPayload'; estimatedWaitingTime: Scalars['Int']; @@ -336,18 +418,10 @@ export type PrintPayload = { export type Query = { __typename?: 'Query'; - /** Get the alexa account linking url */ - alexaLinkingUrl?: Maybe; - /** Will look for Users to delete */ - cleanup: Scalars['Boolean']; - companies?: Maybe>; config: LaraConfig; + companies?: Maybe>; /** Returns the logged in user. This user can be either a Trainee or a Trainer. */ currentUser?: Maybe; - /** Get a User by ID */ - getUser?: Maybe; - /** Print single report or report batch */ - print: PrintPayload; /** Finds the report for a specifig trainee on the requested year and week. */ reportForTrainee?: Maybe; /** Finds the report for the requested year and week. */ @@ -360,34 +434,50 @@ export type Query = { trainees: Array; /** Get all Trainers */ trainers: Array; + /** Print single report or report batch */ + print: PrintPayload; + /** Get a User by ID */ + getUser?: Maybe; + /** Will look for Users to delete */ + cleanup: Scalars['Boolean']; + /** Get the alexa account linking url */ + alexaLinkingUrl?: Maybe; + /** Get the PAPER */ + getPaper?: Maybe; }; -export type QueryGetUserArgs = { +export type QueryReportForTraineeArgs = { + year: Scalars['Int']; + week: Scalars['Int']; id: Scalars['ID']; }; -export type QueryPrintArgs = { - ids: Array; +export type QueryReportForYearAndWeekArgs = { + year: Scalars['Int']; + week: Scalars['Int']; }; -export type QueryReportForTraineeArgs = { - id: Scalars['ID']; - week: Scalars['Int']; - year: Scalars['Int']; +export type QueryReportsArgs = { + statuses?: Maybe>; }; -export type QueryReportForYearAndWeekArgs = { - week: Scalars['Int']; - year: Scalars['Int']; +export type QueryPrintArgs = { + ids: Array; }; -export type QueryReportsArgs = { - statuses?: InputMaybe>; +export type QueryGetUserArgs = { + id: Scalars['ID']; +}; + + +export type QueryGetPaperArgs = { + id: Scalars['ID']; + token?: Maybe; }; export type Report = CommentableInterface & { @@ -397,37 +487,34 @@ export type Report = CommentableInterface & { days: Array; department?: Maybe; id: Scalars['ID']; - nextReportLink?: Maybe; - previousReportLink?: Maybe; - reportAccepted?: Maybe; status: ReportStatus; summary?: Maybe; week: Scalars['Int']; year: Scalars['Int']; + reportAccepted?: Maybe; + previousReportLink?: Maybe; + nextReportLink?: Maybe; }; /** Represents the current state of the report */ export enum ReportStatus { - /** Done reports are marked as archived */ - Archived = 'archived', - /** Used if there is any problem with a report */ - Reopened = 'reopened', + /** Report is open */ + Todo = 'todo', /** Passes the report to the trainer */ Review = 'review', - /** Report is open */ - Todo = 'todo' + /** Used if there is any problem with a report */ + Reopened = 'reopened', + /** Done reports are marked as archived */ + Archived = 'archived' } export type Trainee = UserInterface & { __typename?: 'Trainee'; - alexaSkillLinked?: Maybe; /** The url for the users avatar image. */ avatar: Scalars['String']; company: Company; course?: Maybe; createdAt: Scalars['String']; - deleteAt?: Maybe; - email: Scalars['String']; endDate?: Maybe; endOfToolUsage?: Maybe; firstName: Scalars['String']; @@ -435,7 +522,6 @@ export type Trainee = UserInterface & { language?: Maybe; lastName: Scalars['String']; notification?: Maybe; - openReportsCount: Scalars['Int']; reports: Array; signature?: Maybe; startDate?: Maybe; @@ -444,15 +530,16 @@ export type Trainee = UserInterface & { trainer?: Maybe; type: UserTypeEnum; username: Scalars['String']; + email: Scalars['String']; + deleteAt?: Maybe; + openReportsCount: Scalars['Int']; + alexaSkillLinked?: Maybe; }; export type Trainer = UserInterface & { __typename?: 'Trainer'; - alexaSkillLinked?: Maybe; avatar: Scalars['String']; createdAt: Scalars['String']; - deleteAt?: Maybe; - email: Scalars['String']; firstName: Scalars['String']; id: Scalars['ID']; language?: Maybe; @@ -463,6 +550,9 @@ export type Trainer = UserInterface & { trainees: Array; type: UserTypeEnum; username: Scalars['String']; + email: Scalars['String']; + deleteAt?: Maybe; + alexaSkillLinked?: Maybe; }; export type TrainerTraineePayload = { @@ -472,43 +562,41 @@ export type TrainerTraineePayload = { }; export type UpdateCurrentTraineeInput = { - course?: InputMaybe; + course?: Maybe; }; export type UpdateReportPayload = { __typename?: 'UpdateReportPayload'; - report: Report; trainee: Trainee; + report: Report; }; export type UpdateTraineeInput = { - companyId?: InputMaybe; - email?: InputMaybe; - endDate?: InputMaybe; - firstName?: InputMaybe; - lastName?: InputMaybe; - startDate?: InputMaybe; - startOfToolUsage?: InputMaybe; + firstName?: Maybe; + lastName?: Maybe; + email?: Maybe; + startDate?: Maybe; + endDate?: Maybe; + startOfToolUsage?: Maybe; + companyId?: Maybe; }; export type UpdateTrainerInput = { - email?: InputMaybe; - firstName?: InputMaybe; - lastName?: InputMaybe; + email?: Maybe; + firstName?: Maybe; + lastName?: Maybe; }; export type UserInput = { - language?: InputMaybe; - notification?: InputMaybe; - signature?: InputMaybe; - theme?: InputMaybe; + language?: Maybe; + theme?: Maybe; + signature?: Maybe; + notification?: Maybe; }; export type UserInterface = { - alexaSkillLinked?: Maybe; avatar: Scalars['String']; createdAt: Scalars['String']; - email: Scalars['String']; firstName: Scalars['String']; id: Scalars['ID']; language?: Maybe; @@ -518,32 +606,66 @@ export type UserInterface = { theme?: Maybe; type: UserTypeEnum; username: Scalars['String']; + email: Scalars['String']; + alexaSkillLinked?: Maybe; }; export enum UserTypeEnum { - /** User is an Admin */ - Admin = 'Admin', /** User is a Trainee */ Trainee = 'Trainee', /** User is a Trainer */ - Trainer = 'Trainer' + Trainer = 'Trainer', + /** User is an Admin */ + Admin = 'Admin' } export type ApplicationSettingsUpdateUserMutationVariables = Exact<{ - language?: InputMaybe; - theme?: InputMaybe; - notification?: InputMaybe; + language?: Maybe; + theme?: Maybe; + notification?: Maybe; }>; -export type ApplicationSettingsUpdateUserMutation = { __typename?: 'Mutation', updateCurrentUser?: { __typename: 'Admin', language?: string | undefined, theme?: string | undefined, notification?: boolean | undefined, id: string } | { __typename: 'Trainee', language?: string | undefined, theme?: string | undefined, notification?: boolean | undefined, id: string } | { __typename: 'Trainer', language?: string | undefined, theme?: string | undefined, notification?: boolean | undefined, id: string } | undefined }; +export type ApplicationSettingsUpdateUserMutation = ( + { __typename?: 'Mutation' } + & { updateCurrentUser?: Maybe<( + { __typename: 'Admin' } + & Pick + ) | ( + { __typename: 'Trainee' } + & Pick + ) | ( + { __typename: 'Trainer' } + & Pick + )> } +); export type ClaimTraineeMutationVariables = Exact<{ id: Scalars['ID']; }>; -export type ClaimTraineeMutation = { __typename?: 'Mutation', claimTrainee?: { __typename?: 'TrainerTraineePayload', trainee: { __typename?: 'Trainee', id: string, trainer?: { __typename?: 'Trainer', id: string } | undefined }, trainer: { __typename?: 'Trainer', id: string, trainees: Array<{ __typename?: 'Trainee', id: string }> } } | undefined }; +export type ClaimTraineeMutation = ( + { __typename?: 'Mutation' } + & { claimTrainee?: Maybe<( + { __typename?: 'TrainerTraineePayload' } + & { trainee: ( + { __typename?: 'Trainee' } + & Pick + & { trainer?: Maybe<( + { __typename?: 'Trainer' } + & Pick + )> } + ), trainer: ( + { __typename?: 'Trainer' } + & Pick + & { trainees: Array<( + { __typename?: 'Trainee' } + & Pick + )> } + ) } + )> } +); export type CreateCommentOnDayMutationVariables = Exact<{ id: Scalars['ID']; @@ -552,7 +674,30 @@ export type CreateCommentOnDayMutationVariables = Exact<{ }>; -export type CreateCommentOnDayMutation = { __typename?: 'Mutation', createCommentOnDay: { __typename?: 'CreateCommentPayload', commentable: { __typename?: 'Day', id: string, comments: Array<{ __typename?: 'Comment', id: string, text?: string | undefined, user: { __typename?: 'Admin', id: string, firstName: string, lastName: string, avatar: string } | { __typename?: 'Trainee', id: string, firstName: string, lastName: string, avatar: string } | { __typename?: 'Trainer', id: string, firstName: string, lastName: string, avatar: string } }> } | { __typename?: 'Entry' } | { __typename?: 'Report' } } }; +export type CreateCommentOnDayMutation = ( + { __typename?: 'Mutation' } + & { createCommentOnDay: ( + { __typename?: 'CreateCommentPayload' } + & { commentable: ( + { __typename?: 'Day' } + & Pick + & { comments: Array<( + { __typename?: 'Comment' } + & Pick + & { user: ( + { __typename?: 'Admin' } + & Pick + ) | ( + { __typename?: 'Trainee' } + & Pick + ) | ( + { __typename?: 'Trainer' } + & Pick + ) } + )> } + ) | { __typename?: 'Entry' } | { __typename?: 'Report' } } + ) } +); export type CreateCommentOnEntryMutationVariables = Exact<{ id: Scalars['ID']; @@ -561,7 +706,30 @@ export type CreateCommentOnEntryMutationVariables = Exact<{ }>; -export type CreateCommentOnEntryMutation = { __typename?: 'Mutation', createCommentOnEntry: { __typename?: 'CreateCommentPayload', commentable: { __typename?: 'Day' } | { __typename?: 'Entry', id: string, comments: Array<{ __typename?: 'Comment', id: string, text?: string | undefined, user: { __typename?: 'Admin', id: string, firstName: string, lastName: string, avatar: string } | { __typename?: 'Trainee', id: string, firstName: string, lastName: string, avatar: string } | { __typename?: 'Trainer', id: string, firstName: string, lastName: string, avatar: string } }> } | { __typename?: 'Report' } } }; +export type CreateCommentOnEntryMutation = ( + { __typename?: 'Mutation' } + & { createCommentOnEntry: ( + { __typename?: 'CreateCommentPayload' } + & { commentable: { __typename?: 'Day' } | ( + { __typename?: 'Entry' } + & Pick + & { comments: Array<( + { __typename?: 'Comment' } + & Pick + & { user: ( + { __typename?: 'Admin' } + & Pick + ) | ( + { __typename?: 'Trainee' } + & Pick + ) | ( + { __typename?: 'Trainer' } + & Pick + ) } + )> } + ) | { __typename?: 'Report' } } + ) } +); export type CreateCommentOnReportMutationVariables = Exact<{ id: Scalars['ID']; @@ -570,7 +738,30 @@ export type CreateCommentOnReportMutationVariables = Exact<{ }>; -export type CreateCommentOnReportMutation = { __typename?: 'Mutation', createCommentOnReport: { __typename?: 'CreateCommentPayload', commentable: { __typename?: 'Day' } | { __typename?: 'Entry' } | { __typename?: 'Report', id: string, comments: Array<{ __typename?: 'Comment', id: string, text?: string | undefined, user: { __typename?: 'Admin', id: string, firstName: string, lastName: string, avatar: string } | { __typename?: 'Trainee', id: string, firstName: string, lastName: string, avatar: string } | { __typename?: 'Trainer', id: string, firstName: string, lastName: string, avatar: string } }> } } }; +export type CreateCommentOnReportMutation = ( + { __typename?: 'Mutation' } + & { createCommentOnReport: ( + { __typename?: 'CreateCommentPayload' } + & { commentable: { __typename?: 'Day' } | { __typename?: 'Entry' } | ( + { __typename?: 'Report' } + & Pick + & { comments: Array<( + { __typename?: 'Comment' } + & Pick + & { user: ( + { __typename?: 'Admin' } + & Pick + ) | ( + { __typename?: 'Trainee' } + & Pick + ) | ( + { __typename?: 'Trainer' } + & Pick + ) } + )> } + ) } + ) } +); export type CreateEntryMutationVariables = Exact<{ dayId: Scalars['String']; @@ -578,55 +769,131 @@ export type CreateEntryMutationVariables = Exact<{ }>; -export type CreateEntryMutation = { __typename?: 'Mutation', createEntry: { __typename?: 'MutateEntryPayload', day: { __typename: 'Day', id: string, entries: Array<{ __typename?: 'Entry', id: string, text: string, time: number, orderId: number, comments: Array<{ __typename?: 'Comment', id: string }> }> } } }; +export type CreateEntryMutation = ( + { __typename?: 'Mutation' } + & { createEntry: ( + { __typename?: 'MutateEntryPayload' } + & { day: ( + { __typename: 'Day' } + & Pick + & { entries: Array<( + { __typename?: 'Entry' } + & Pick + & { comments: Array<( + { __typename?: 'Comment' } + & Pick + )> } + )> } + ) } + ) } +); export type CreateOAuthCodeMutationVariables = Exact<{ [key: string]: never; }>; -export type CreateOAuthCodeMutation = { __typename?: 'Mutation', createOAuthCode: string }; +export type CreateOAuthCodeMutation = ( + { __typename?: 'Mutation' } + & Pick +); export type CreateTraineeMutationVariables = Exact<{ input: CreateTraineeInput; }>; -export type CreateTraineeMutation = { __typename?: 'Mutation', createTrainee?: { __typename?: 'Trainee', id: string, startDate?: string | undefined, startOfToolUsage?: string | undefined, endDate?: string | undefined, course?: string | undefined, avatar: string, firstName: string, lastName: string, email: string, type: UserTypeEnum, deleteAt?: string | undefined, company: { __typename?: 'Company', id: string } } | undefined }; +export type CreateTraineeMutation = ( + { __typename?: 'Mutation' } + & { createTrainee?: Maybe<( + { __typename?: 'Trainee' } + & Pick + & { company: ( + { __typename?: 'Company' } + & Pick + ) } + )> } +); export type CreateTrainerMutationVariables = Exact<{ input: CreateTrainerInput; }>; -export type CreateTrainerMutation = { __typename?: 'Mutation', createTrainer?: { __typename?: 'Trainer', id: string, avatar: string, firstName: string, lastName: string, email: string, type: UserTypeEnum } | undefined }; +export type CreateTrainerMutation = ( + { __typename?: 'Mutation' } + & { createTrainer?: Maybe<( + { __typename?: 'Trainer' } + & Pick + )> } +); export type DayStatusSelectUpdateDayMutationVariables = Exact<{ id: Scalars['ID']; - status?: InputMaybe; + status?: Maybe; }>; -export type DayStatusSelectUpdateDayMutation = { __typename?: 'Mutation', updateDay?: { __typename: 'Day', id: string, status?: DayStatusEnum | undefined } | undefined }; +export type DayStatusSelectUpdateDayMutation = ( + { __typename?: 'Mutation' } + & { updateDay?: Maybe<( + { __typename: 'Day' } + & Pick + )> } +); export type DebugLoginMutationVariables = Exact<{ id: Scalars['String']; }>; -export type DebugLoginMutation = { __typename?: 'Mutation', _devloginuser?: { __typename?: 'OAuthPayload', accessToken: string, refreshToken?: string | undefined, expiresIn: number } | undefined }; +export type DebugLoginMutation = ( + { __typename?: 'Mutation' } + & { _devloginuser?: Maybe<( + { __typename?: 'OAuthPayload' } + & Pick + )> } +); export type DebugSetUsertypeMutationVariables = Exact<{ usertype: Scalars['String']; }>; -export type DebugSetUsertypeMutation = { __typename?: 'Mutation', _devsetusertype: { __typename?: 'DevSetUserPayload', user?: { __typename: 'Admin', id: string } | { __typename: 'Trainee', id: string } | { __typename: 'Trainer', id: string } | undefined } }; +export type DebugSetUsertypeMutation = ( + { __typename?: 'Mutation' } + & { _devsetusertype: ( + { __typename?: 'DevSetUserPayload' } + & { user?: Maybe<( + { __typename: 'Admin' } + & Pick + ) | ( + { __typename: 'Trainee' } + & Pick + ) | ( + { __typename: 'Trainer' } + & Pick + )> } + ) } +); export type DeleteEntryMutationVariables = Exact<{ id: Scalars['ID']; }>; -export type DeleteEntryMutation = { __typename?: 'Mutation', deleteEntry: { __typename?: 'MutateEntryPayload', day: { __typename: 'Day', id: string, entries: Array<{ __typename?: 'Entry', id: string }> } } }; +export type DeleteEntryMutation = ( + { __typename?: 'Mutation' } + & { deleteEntry: ( + { __typename?: 'MutateEntryPayload' } + & { day: ( + { __typename: 'Day' } + & Pick + & { entries: Array<( + { __typename?: 'Entry' } + & Pick + )> } + ) } + ) } +); export type LinkAlexaMutationVariables = Exact<{ code: Scalars['String']; @@ -634,54 +901,146 @@ export type LinkAlexaMutationVariables = Exact<{ }>; -export type LinkAlexaMutation = { __typename?: 'Mutation', linkAlexa?: { __typename?: 'Admin', id: string, alexaSkillLinked?: boolean | undefined } | { __typename?: 'Trainee', id: string, alexaSkillLinked?: boolean | undefined } | { __typename?: 'Trainer', id: string, alexaSkillLinked?: boolean | undefined } | undefined }; +export type LinkAlexaMutation = ( + { __typename?: 'Mutation' } + & { linkAlexa?: Maybe<( + { __typename?: 'Admin' } + & Pick + ) | ( + { __typename?: 'Trainee' } + & Pick + ) | ( + { __typename?: 'Trainer' } + & Pick + )> } +); export type LoginPageLoginMutationVariables = Exact<{ token: Scalars['String']; }>; -export type LoginPageLoginMutation = { __typename?: 'Mutation', login?: { __typename?: 'OAuthPayload', accessToken: string, refreshToken?: string | undefined, expiresIn: number } | undefined }; +export type LoginPageLoginMutation = ( + { __typename?: 'Mutation' } + & { login?: Maybe<( + { __typename?: 'OAuthPayload' } + & Pick + )> } +); export type MarkUserForDeleteMutationVariables = Exact<{ id: Scalars['ID']; }>; -export type MarkUserForDeleteMutation = { __typename?: 'Mutation', markUserForDeletion?: { __typename?: 'Admin', id: string } | { __typename?: 'Trainee', deleteAt?: string | undefined, id: string } | { __typename?: 'Trainer', deleteAt?: string | undefined, id: string } | undefined }; +export type MarkUserForDeleteMutation = ( + { __typename?: 'Mutation' } + & { markUserForDeletion?: Maybe<( + { __typename?: 'Admin' } + & Pick + ) | ( + { __typename?: 'Trainee' } + & Pick + ) | ( + { __typename?: 'Trainer' } + & Pick + )> } +); export type SignatureSettingsUpdateSignatureMutationVariables = Exact<{ - signature?: InputMaybe; + signature?: Maybe; }>; -export type SignatureSettingsUpdateSignatureMutation = { __typename?: 'Mutation', updateCurrentUser?: { __typename?: 'Admin', id: string, signature?: string | undefined } | { __typename?: 'Trainee', id: string, signature?: string | undefined } | { __typename?: 'Trainer', id: string, signature?: string | undefined } | undefined }; +export type SignatureSettingsUpdateSignatureMutation = ( + { __typename?: 'Mutation' } + & { updateCurrentUser?: Maybe<( + { __typename?: 'Admin' } + & Pick + ) | ( + { __typename?: 'Trainee' } + & Pick + ) | ( + { __typename?: 'Trainer' } + & Pick + )> } +); export type TraineeSettingsUpdateTraineeMutationVariables = Exact<{ - course?: InputMaybe; + course?: Maybe; }>; -export type TraineeSettingsUpdateTraineeMutation = { __typename?: 'Mutation', updateCurrentTrainee?: { __typename?: 'Trainee', id: string, course?: string | undefined } | undefined }; +export type TraineeSettingsUpdateTraineeMutation = ( + { __typename?: 'Mutation' } + & { updateCurrentTrainee?: Maybe<( + { __typename?: 'Trainee' } + & Pick + )> } +); export type UnclaimTraineeMutationVariables = Exact<{ id: Scalars['ID']; }>; -export type UnclaimTraineeMutation = { __typename?: 'Mutation', unclaimTrainee?: { __typename?: 'TrainerTraineePayload', trainee: { __typename?: 'Trainee', id: string, trainer?: { __typename?: 'Trainer', id: string } | undefined }, trainer: { __typename?: 'Trainer', id: string, trainees: Array<{ __typename?: 'Trainee', id: string }> } } | undefined }; +export type UnclaimTraineeMutation = ( + { __typename?: 'Mutation' } + & { unclaimTrainee?: Maybe<( + { __typename?: 'TrainerTraineePayload' } + & { trainee: ( + { __typename?: 'Trainee' } + & Pick + & { trainer?: Maybe<( + { __typename?: 'Trainer' } + & Pick + )> } + ), trainer: ( + { __typename?: 'Trainer' } + & Pick + & { trainees: Array<( + { __typename?: 'Trainee' } + & Pick + )> } + ) } + )> } +); export type UnlinkAlexaMutationVariables = Exact<{ [key: string]: never; }>; -export type UnlinkAlexaMutation = { __typename?: 'Mutation', unlinkAlexa?: { __typename?: 'Admin', id: string, alexaSkillLinked?: boolean | undefined } | { __typename?: 'Trainee', id: string, alexaSkillLinked?: boolean | undefined } | { __typename?: 'Trainer', id: string, alexaSkillLinked?: boolean | undefined } | undefined }; +export type UnlinkAlexaMutation = ( + { __typename?: 'Mutation' } + & { unlinkAlexa?: Maybe<( + { __typename?: 'Admin' } + & Pick + ) | ( + { __typename?: 'Trainee' } + & Pick + ) | ( + { __typename?: 'Trainer' } + & Pick + )> } +); export type UnmarkUserForDeleteMutationVariables = Exact<{ id: Scalars['ID']; }>; -export type UnmarkUserForDeleteMutation = { __typename?: 'Mutation', unmarkUserForDeletion?: { __typename?: 'Admin', id: string } | { __typename?: 'Trainee', deleteAt?: string | undefined, id: string } | { __typename?: 'Trainer', deleteAt?: string | undefined, id: string } | undefined }; +export type UnmarkUserForDeleteMutation = ( + { __typename?: 'Mutation' } + & { unmarkUserForDeletion?: Maybe<( + { __typename?: 'Admin' } + & Pick + ) | ( + { __typename?: 'Trainee' } + & Pick + ) | ( + { __typename?: 'Trainer' } + & Pick + )> } +); export type UpdateEntryOrderMutationVariables = Exact<{ entryId: Scalars['ID']; @@ -690,7 +1049,34 @@ export type UpdateEntryOrderMutationVariables = Exact<{ }>; -export type UpdateEntryOrderMutation = { __typename?: 'Mutation', updateEntryOrder: { __typename?: 'MutateEntryPayload', entry?: { __typename?: 'Entry', id: string, orderId: number } | undefined, day: { __typename?: 'Day', id: string, entries: Array<{ __typename?: 'Entry', id: string, orderId: number }> }, report: { __typename?: 'Report', id: string, days: Array<{ __typename?: 'Day', id: string, entries: Array<{ __typename?: 'Entry', id: string, orderId: number }> }> } } }; +export type UpdateEntryOrderMutation = ( + { __typename?: 'Mutation' } + & { updateEntryOrder: ( + { __typename?: 'MutateEntryPayload' } + & { entry?: Maybe<( + { __typename?: 'Entry' } + & Pick + )>, day: ( + { __typename?: 'Day' } + & Pick + & { entries: Array<( + { __typename?: 'Entry' } + & Pick + )> } + ), report: ( + { __typename?: 'Report' } + & Pick + & { days: Array<( + { __typename?: 'Day' } + & Pick + & { entries: Array<( + { __typename?: 'Entry' } + & Pick + )> } + )> } + ) } + ) } +); export type UpdateEntryMutationVariables = Exact<{ id: Scalars['ID']; @@ -698,27 +1084,57 @@ export type UpdateEntryMutationVariables = Exact<{ }>; -export type UpdateEntryMutation = { __typename?: 'Mutation', updateEntry: { __typename?: 'MutateEntryPayload', entry?: { __typename?: 'Entry', id: string, time: number, text: string } | undefined } }; +export type UpdateEntryMutation = ( + { __typename?: 'Mutation' } + & { updateEntry: ( + { __typename?: 'MutateEntryPayload' } + & { entry?: Maybe<( + { __typename?: 'Entry' } + & Pick + )> } + ) } +); export type UpdateReportReportReviewPageMutationVariables = Exact<{ id: Scalars['ID']; - summary?: InputMaybe; - department?: InputMaybe; - status?: InputMaybe; + summary?: Maybe; + department?: Maybe; + status?: Maybe; }>; -export type UpdateReportReportReviewPageMutation = { __typename?: 'Mutation', updateReport?: { __typename?: 'UpdateReportPayload', report: { __typename?: 'Report', id: string, summary?: string | undefined, department?: string | undefined, status: ReportStatus }, trainee: { __typename?: 'Trainee', id: string, openReportsCount: number } } | undefined }; +export type UpdateReportReportReviewPageMutation = ( + { __typename?: 'Mutation' } + & { updateReport?: Maybe<( + { __typename?: 'UpdateReportPayload' } + & { report: ( + { __typename?: 'Report' } + & Pick + ), trainee: ( + { __typename?: 'Trainee' } + & Pick + ) } + )> } +); export type UpdateReportMutationVariables = Exact<{ id: Scalars['ID']; - summary?: InputMaybe; - department?: InputMaybe; - status?: InputMaybe; + summary?: Maybe; + department?: Maybe; + status?: Maybe; }>; -export type UpdateReportMutation = { __typename?: 'Mutation', updateReport?: { __typename?: 'UpdateReportPayload', report: { __typename?: 'Report', id: string, summary?: string | undefined, department?: string | undefined, status: ReportStatus } } | undefined }; +export type UpdateReportMutation = ( + { __typename?: 'Mutation' } + & { updateReport?: Maybe<( + { __typename?: 'UpdateReportPayload' } + & { report: ( + { __typename?: 'Report' } + & Pick + ) } + )> } +); export type UpdateTraineeMutationVariables = Exact<{ input: UpdateTraineeInput; @@ -726,7 +1142,17 @@ export type UpdateTraineeMutationVariables = Exact<{ }>; -export type UpdateTraineeMutation = { __typename?: 'Mutation', updateTrainee?: { __typename?: 'Trainee', id: string, startDate?: string | undefined, startOfToolUsage?: string | undefined, endDate?: string | undefined, firstName: string, lastName: string, email: string, avatar: string, company: { __typename?: 'Company', id: string } } | undefined }; +export type UpdateTraineeMutation = ( + { __typename?: 'Mutation' } + & { updateTrainee?: Maybe<( + { __typename?: 'Trainee' } + & Pick + & { company: ( + { __typename?: 'Company' } + & Pick + ) } + )> } +); export type UpdateTrainerMutationVariables = Exact<{ input: UpdateTrainerInput; @@ -734,42 +1160,127 @@ export type UpdateTrainerMutationVariables = Exact<{ }>; -export type UpdateTrainerMutation = { __typename?: 'Mutation', updateTrainer?: { __typename?: 'Trainer', id: string, firstName: string, lastName: string, email: string, avatar: string, type: UserTypeEnum } | undefined }; +export type UpdateTrainerMutation = ( + { __typename?: 'Mutation' } + & { updateTrainer?: Maybe<( + { __typename?: 'Trainer' } + & Pick + )> } +); export type AdminTraineesPageQueryVariables = Exact<{ [key: string]: never; }>; -export type AdminTraineesPageQuery = { __typename?: 'Query', trainees: Array<{ __typename?: 'Trainee', id: string, firstName: string, lastName: string, avatar: string, deleteAt?: string | undefined }>, companies?: Array<{ __typename?: 'Company', id: string, name: string }> | undefined }; +export type AdminTraineesPageQuery = ( + { __typename?: 'Query' } + & { trainees: Array<( + { __typename?: 'Trainee' } + & Pick + )>, companies?: Maybe + )>> } +); export type AdminTrainersPageQueryVariables = Exact<{ [key: string]: never; }>; -export type AdminTrainersPageQuery = { __typename?: 'Query', trainers: Array<{ __typename?: 'Trainer', id: string, firstName: string, lastName: string, avatar: string, deleteAt?: string | undefined }> }; +export type AdminTrainersPageQuery = ( + { __typename?: 'Query' } + & { trainers: Array<( + { __typename?: 'Trainer' } + & Pick + )> } +); export type AlexaLinkingUrlQueryVariables = Exact<{ [key: string]: never; }>; -export type AlexaLinkingUrlQuery = { __typename?: 'Query', alexaLinkingUrl?: string | undefined }; +export type AlexaLinkingUrlQuery = ( + { __typename?: 'Query' } + & Pick +); export type ArchivePageDataQueryVariables = Exact<{ [key: string]: never; }>; -export type ArchivePageDataQuery = { __typename?: 'Query', currentUser?: { __typename?: 'Admin', id: string, theme?: string | undefined, firstName: string, lastName: string, language?: string | undefined } | { __typename?: 'Trainee', id: string, theme?: string | undefined, firstName: string, lastName: string, language?: string | undefined } | { __typename?: 'Trainer', id: string, theme?: string | undefined, firstName: string, lastName: string, language?: string | undefined } | undefined, reports: Array<{ __typename: 'Report', id: string, week: number, year: number, status: ReportStatus, department?: string | undefined, days: Array<{ __typename?: 'Day', status?: DayStatusEnum | undefined, entries: Array<{ __typename?: 'Entry', id: string, time: number }> }> } | undefined> }; +export type ArchivePageDataQuery = ( + { __typename?: 'Query' } + & { currentUser?: Maybe<( + { __typename?: 'Admin' } + & Pick + ) | ( + { __typename?: 'Trainee' } + & Pick + ) | ( + { __typename?: 'Trainer' } + & Pick + )>, reports: Array + & { days: Array<( + { __typename?: 'Day' } + & Pick + & { entries: Array<( + { __typename?: 'Entry' } + & Pick + )> } + )> } + )>> } +); export type CommentBoxDataQueryVariables = Exact<{ [key: string]: never; }>; -export type CommentBoxDataQuery = { __typename?: 'Query', currentUser?: { __typename?: 'Admin', id: string } | { __typename?: 'Trainee', id: string } | { __typename?: 'Trainer', id: string } | undefined }; +export type CommentBoxDataQuery = ( + { __typename?: 'Query' } + & { currentUser?: Maybe<( + { __typename?: 'Admin' } + & Pick + ) | ( + { __typename?: 'Trainee' } + & Pick + ) | ( + { __typename?: 'Trainer' } + & Pick + )> } +); export type ConfigQueryVariables = Exact<{ [key: string]: never; }>; -export type ConfigQuery = { __typename?: 'Query', config: { __typename?: 'LaraConfig', minWorkDayMinutes: number, maxWorkDayMinutes: number, expectedWorkDayMinutes: number, minEducationDayMinutes: number, maxEducationDayMinutes: number, maxEntryMinutes: number, maxPeriodYearsCount: number, finishedWeekDayCount: number } }; +export type ConfigQuery = ( + { __typename?: 'Query' } + & { config: ( + { __typename?: 'LaraConfig' } + & Pick + ) } +); export type CurrentUserQueryVariables = Exact<{ [key: string]: never; }>; -export type CurrentUserQuery = { __typename?: 'Query', currentUser?: { __typename?: 'Admin', id: string, language?: string | undefined, theme?: string | undefined, type: UserTypeEnum } | { __typename?: 'Trainee', startDate?: string | undefined, endDate?: string | undefined, course?: string | undefined, id: string, language?: string | undefined, theme?: string | undefined, type: UserTypeEnum, company: { __typename?: 'Company', id: string } } | { __typename?: 'Trainer', id: string, language?: string | undefined, theme?: string | undefined, type: UserTypeEnum, trainees: Array<{ __typename?: 'Trainee', id: string }> } | undefined }; +export type CurrentUserQuery = ( + { __typename?: 'Query' } + & { currentUser?: Maybe<( + { __typename?: 'Admin' } + & Pick + ) | ( + { __typename?: 'Trainee' } + & Pick + & { company: ( + { __typename?: 'Company' } + & Pick + ) } + ) | ( + { __typename?: 'Trainer' } + & Pick + & { trainees: Array<( + { __typename?: 'Trainee' } + & Pick + )> } + )> } +); export type DashboardPageDataQueryVariables = Exact<{ currentYear: Scalars['Int']; @@ -777,41 +1288,182 @@ export type DashboardPageDataQueryVariables = Exact<{ }>; -export type DashboardPageDataQuery = { __typename?: 'Query', currentUser?: { __typename?: 'Admin', id: string, theme?: string | undefined } | { __typename?: 'Trainee', id: string, theme?: string | undefined } | { __typename?: 'Trainer', id: string, theme?: string | undefined } | undefined, reports: Array<{ __typename: 'Report', id: string, week: number, year: number, status: ReportStatus, department?: string | undefined, days: Array<{ __typename?: 'Day', status?: DayStatusEnum | undefined, entries: Array<{ __typename?: 'Entry', id: string, time: number }> }> } | undefined>, reportForYearAndWeek?: { __typename?: 'Report', id: string, status: ReportStatus, days: Array<{ __typename?: 'Day', status?: DayStatusEnum | undefined, date: string, id: string, entries: Array<{ __typename?: 'Entry', id: string, text: string, time: number, orderId: number, comments: Array<{ __typename?: 'Comment', id: string, user: { __typename?: 'Admin', id: string, firstName: string, lastName: string, avatar: string } | { __typename?: 'Trainee', id: string, firstName: string, lastName: string, avatar: string } | { __typename?: 'Trainer', id: string, firstName: string, lastName: string, avatar: string } }> }>, comments: Array<{ __typename?: 'Comment', id: string, text?: string | undefined, user: { __typename?: 'Admin', id: string, firstName: string, lastName: string, avatar: string } | { __typename?: 'Trainee', id: string, firstName: string, lastName: string, avatar: string } | { __typename?: 'Trainer', id: string, firstName: string, lastName: string, avatar: string } }> }> } | undefined }; +export type DashboardPageDataQuery = ( + { __typename?: 'Query' } + & { currentUser?: Maybe<( + { __typename?: 'Admin' } + & Pick + ) | ( + { __typename?: 'Trainee' } + & Pick + ) | ( + { __typename?: 'Trainer' } + & Pick + )>, reports: Array + & { days: Array<( + { __typename?: 'Day' } + & Pick + & { entries: Array<( + { __typename?: 'Entry' } + & Pick + )> } + )> } + )>>, reportForYearAndWeek?: Maybe<( + { __typename?: 'Report' } + & Pick + & { days: Array<( + { __typename?: 'Day' } + & Pick + & { entries: Array<( + { __typename?: 'Entry' } + & Pick + & { comments: Array<( + { __typename?: 'Comment' } + & Pick + & { user: ( + { __typename?: 'Admin' } + & Pick + ) | ( + { __typename?: 'Trainee' } + & Pick + ) | ( + { __typename?: 'Trainer' } + & Pick + ) } + )> } + )>, comments: Array<( + { __typename?: 'Comment' } + & Pick + & { user: ( + { __typename?: 'Admin' } + & Pick + ) | ( + { __typename?: 'Trainee' } + & Pick + ) | ( + { __typename?: 'Trainer' } + & Pick + ) } + )> } + )> } + )> } +); export type DayInputDataQueryVariables = Exact<{ [key: string]: never; }>; -export type DayInputDataQuery = { __typename?: 'Query', currentUser?: { __typename?: 'Admin', id: string, firstName: string, lastName: string, avatar: string, type: UserTypeEnum } | { __typename?: 'Trainee', id: string, firstName: string, lastName: string, avatar: string, type: UserTypeEnum } | { __typename?: 'Trainer', id: string, firstName: string, lastName: string, avatar: string, type: UserTypeEnum } | undefined }; +export type DayInputDataQuery = ( + { __typename?: 'Query' } + & { currentUser?: Maybe<( + { __typename?: 'Admin' } + & Pick + ) | ( + { __typename?: 'Trainee' } + & Pick + ) | ( + { __typename?: 'Trainer' } + & Pick + )> } +); export type EntryInputDataQueryVariables = Exact<{ [key: string]: never; }>; -export type EntryInputDataQuery = { __typename?: 'Query', currentUser?: { __typename?: 'Admin', id: string, type: UserTypeEnum, firstName: string, lastName: string, avatar: string, username: string } | { __typename?: 'Trainee', id: string, type: UserTypeEnum, firstName: string, lastName: string, avatar: string, username: string } | { __typename?: 'Trainer', id: string, type: UserTypeEnum, firstName: string, lastName: string, avatar: string, username: string } | undefined }; +export type EntryInputDataQuery = ( + { __typename?: 'Query' } + & { currentUser?: Maybe<( + { __typename?: 'Admin' } + & Pick + ) | ( + { __typename?: 'Trainee' } + & Pick + ) | ( + { __typename?: 'Trainer' } + & Pick + )> } +); export type UserPageQueryVariables = Exact<{ id: Scalars['ID']; }>; -export type UserPageQuery = { __typename?: 'Query', getUser?: { __typename?: 'Admin', id: string, avatar: string, firstName: string, lastName: string, email: string, type: UserTypeEnum } | { __typename?: 'Trainee', startDate?: string | undefined, startOfToolUsage?: string | undefined, endDate?: string | undefined, deleteAt?: string | undefined, course?: string | undefined, id: string, avatar: string, firstName: string, lastName: string, email: string, type: UserTypeEnum, company: { __typename?: 'Company', id: string }, trainer?: { __typename?: 'Trainer', id: string, firstName: string, lastName: string, avatar: string } | undefined } | { __typename?: 'Trainer', deleteAt?: string | undefined, id: string, avatar: string, firstName: string, lastName: string, email: string, type: UserTypeEnum, trainees: Array<{ __typename?: 'Trainee', id: string, firstName: string, lastName: string, avatar: string }> } | undefined, companies?: Array<{ __typename?: 'Company', id: string, name: string }> | undefined }; +export type UserPageQuery = ( + { __typename?: 'Query' } + & { getUser?: Maybe<( + { __typename?: 'Admin' } + & Pick + ) | ( + { __typename?: 'Trainee' } + & Pick + & { company: ( + { __typename?: 'Company' } + & Pick + ), trainer?: Maybe<( + { __typename?: 'Trainer' } + & Pick + )> } + ) | ( + { __typename?: 'Trainer' } + & Pick + & { trainees: Array<( + { __typename?: 'Trainee' } + & Pick + )> } + )>, companies?: Maybe + )>> } +); export type NavigationDataQueryVariables = Exact<{ [key: string]: never; }>; -export type NavigationDataQuery = { __typename?: 'Query', currentUser?: { __typename: 'Admin', type: UserTypeEnum, id: string, firstName: string, lastName: string, avatar: string } | { __typename: 'Trainee', type: UserTypeEnum, id: string, firstName: string, lastName: string, avatar: string } | { __typename: 'Trainer', type: UserTypeEnum, id: string, firstName: string, lastName: string, avatar: string } | undefined }; +export type NavigationDataQuery = ( + { __typename?: 'Query' } + & { currentUser?: Maybe<( + { __typename: 'Admin' } + & Pick + ) | ( + { __typename: 'Trainee' } + & Pick + ) | ( + { __typename: 'Trainer' } + & Pick + )> } +); export type OnboardingPageDataQueryVariables = Exact<{ [key: string]: never; }>; -export type OnboardingPageDataQuery = { __typename?: 'Query', currentUser?: { __typename?: 'Admin', id: string, firstName: string } | { __typename?: 'Trainee', id: string, firstName: string } | { __typename?: 'Trainer', id: string, firstName: string } | undefined }; +export type OnboardingPageDataQuery = ( + { __typename?: 'Query' } + & { currentUser?: Maybe<( + { __typename?: 'Admin' } + & Pick + ) | ( + { __typename?: 'Trainee' } + & Pick + ) | ( + { __typename?: 'Trainer' } + & Pick + )> } +); export type PrintDataQueryVariables = Exact<{ ids: Array | Scalars['ID']; }>; -export type PrintDataQuery = { __typename?: 'Query', print: { __typename?: 'PrintPayload', estimatedWaitingTime: number } }; +export type PrintDataQuery = ( + { __typename?: 'Query' } + & { print: ( + { __typename?: 'PrintPayload' } + & Pick + ) } +); export type ReportPageDataQueryVariables = Exact<{ year: Scalars['Int']; @@ -819,7 +1471,70 @@ export type ReportPageDataQueryVariables = Exact<{ }>; -export type ReportPageDataQuery = { __typename?: 'Query', currentUser?: { __typename?: 'Admin', id: string, firstName: string, lastName: string, avatar: string, username: string } | { __typename?: 'Trainee', startOfToolUsage?: string | undefined, endOfToolUsage?: string | undefined, id: string, firstName: string, lastName: string, avatar: string, username: string } | { __typename?: 'Trainer', id: string, firstName: string, lastName: string, avatar: string, username: string } | undefined, reportForYearAndWeek?: { __typename?: 'Report', id: string, week: number, year: number, summary?: string | undefined, department?: string | undefined, status: ReportStatus, previousReportLink?: string | undefined, nextReportLink?: string | undefined, comments: Array<{ __typename?: 'Comment', id: string, text?: string | undefined, user: { __typename?: 'Admin', id: string, firstName: string, lastName: string, avatar: string } | { __typename?: 'Trainee', id: string, firstName: string, lastName: string, avatar: string } | { __typename?: 'Trainer', id: string, firstName: string, lastName: string, avatar: string } }>, days: Array<{ __typename?: 'Day', status?: DayStatusEnum | undefined, date: string, id: string, comments: Array<{ __typename?: 'Comment', id: string, text?: string | undefined, user: { __typename?: 'Admin', id: string, firstName: string, lastName: string, avatar: string } | { __typename?: 'Trainee', id: string, firstName: string, lastName: string, avatar: string } | { __typename?: 'Trainer', id: string, firstName: string, lastName: string, avatar: string } }>, entries: Array<{ __typename?: 'Entry', id: string, text: string, time: number, orderId: number, comments: Array<{ __typename?: 'Comment', id: string, text?: string | undefined, user: { __typename?: 'Admin', id: string, firstName: string, lastName: string, avatar: string } | { __typename?: 'Trainee', id: string, firstName: string, lastName: string, avatar: string } | { __typename?: 'Trainer', id: string, firstName: string, lastName: string, avatar: string } }> }> }> } | undefined }; +export type ReportPageDataQuery = ( + { __typename?: 'Query' } + & { currentUser?: Maybe<( + { __typename?: 'Admin' } + & Pick + ) | ( + { __typename?: 'Trainee' } + & Pick + ) | ( + { __typename?: 'Trainer' } + & Pick + )>, reportForYearAndWeek?: Maybe<( + { __typename?: 'Report' } + & Pick + & { comments: Array<( + { __typename?: 'Comment' } + & Pick + & { user: ( + { __typename?: 'Admin' } + & Pick + ) | ( + { __typename?: 'Trainee' } + & Pick + ) | ( + { __typename?: 'Trainer' } + & Pick + ) } + )>, days: Array<( + { __typename?: 'Day' } + & Pick + & { comments: Array<( + { __typename?: 'Comment' } + & Pick + & { user: ( + { __typename?: 'Admin' } + & Pick + ) | ( + { __typename?: 'Trainee' } + & Pick + ) | ( + { __typename?: 'Trainer' } + & Pick + ) } + )>, entries: Array<( + { __typename?: 'Entry' } + & Pick + & { comments: Array<( + { __typename?: 'Comment' } + & Pick + & { user: ( + { __typename?: 'Admin' } + & Pick + ) | ( + { __typename?: 'Trainee' } + & Pick + ) | ( + { __typename?: 'Trainer' } + & Pick + ) } + )> } + )> } + )> } + )> } +); export type ReportReviewPageDataQueryVariables = Exact<{ year: Scalars['Int']; @@ -828,42 +1543,204 @@ export type ReportReviewPageDataQueryVariables = Exact<{ }>; -export type ReportReviewPageDataQuery = { __typename?: 'Query', currentUser?: { __typename?: 'Admin', id: string, firstName: string, lastName: string, avatar: string, username: string } | { __typename?: 'Trainee', id: string, firstName: string, lastName: string, avatar: string, username: string } | { __typename?: 'Trainer', id: string, firstName: string, lastName: string, avatar: string, username: string } | undefined, reportForTrainee?: { __typename?: 'Report', id: string, week: number, year: number, summary?: string | undefined, department?: string | undefined, status: ReportStatus, comments: Array<{ __typename?: 'Comment', id: string, text?: string | undefined, user: { __typename?: 'Admin', id: string, firstName: string, lastName: string, avatar: string } | { __typename?: 'Trainee', id: string, firstName: string, lastName: string, avatar: string } | { __typename?: 'Trainer', id: string, firstName: string, lastName: string, avatar: string } }>, days: Array<{ __typename?: 'Day', status?: DayStatusEnum | undefined, date: string, id: string, entries: Array<{ __typename?: 'Entry', id: string, text: string, time: number, orderId: number, comments: Array<{ __typename?: 'Comment', id: string, text?: string | undefined, user: { __typename?: 'Admin', id: string, firstName: string, lastName: string, avatar: string } | { __typename?: 'Trainee', id: string, firstName: string, lastName: string, avatar: string } | { __typename?: 'Trainer', id: string, firstName: string, lastName: string, avatar: string } }> }>, comments: Array<{ __typename?: 'Comment', id: string, text?: string | undefined, user: { __typename?: 'Admin', id: string, firstName: string, lastName: string, avatar: string } | { __typename?: 'Trainee', id: string, firstName: string, lastName: string, avatar: string } | { __typename?: 'Trainer', id: string, firstName: string, lastName: string, avatar: string } }> }> } | undefined }; +export type ReportReviewPageDataQuery = ( + { __typename?: 'Query' } + & { currentUser?: Maybe<( + { __typename?: 'Admin' } + & Pick + ) | ( + { __typename?: 'Trainee' } + & Pick + ) | ( + { __typename?: 'Trainer' } + & Pick + )>, reportForTrainee?: Maybe<( + { __typename?: 'Report' } + & Pick + & { comments: Array<( + { __typename?: 'Comment' } + & Pick + & { user: ( + { __typename?: 'Admin' } + & Pick + ) | ( + { __typename?: 'Trainee' } + & Pick + ) | ( + { __typename?: 'Trainer' } + & Pick + ) } + )>, days: Array<( + { __typename?: 'Day' } + & Pick + & { entries: Array<( + { __typename?: 'Entry' } + & Pick + & { comments: Array<( + { __typename?: 'Comment' } + & Pick + & { user: ( + { __typename?: 'Admin' } + & Pick + ) | ( + { __typename?: 'Trainee' } + & Pick + ) | ( + { __typename?: 'Trainer' } + & Pick + ) } + )> } + )>, comments: Array<( + { __typename?: 'Comment' } + & Pick + & { user: ( + { __typename?: 'Admin' } + & Pick + ) | ( + { __typename?: 'Trainee' } + & Pick + ) | ( + { __typename?: 'Trainer' } + & Pick + ) } + )> } + )> } + )> } +); export type SettingsPageDataQueryVariables = Exact<{ [key: string]: never; }>; -export type SettingsPageDataQuery = { __typename?: 'Query', currentUser?: { __typename?: 'Admin', id: string, type: UserTypeEnum, language?: string | undefined, theme?: string | undefined, notification?: boolean | undefined } | { __typename?: 'Trainee', startDate?: string | undefined, endDate?: string | undefined, course?: string | undefined, alexaSkillLinked?: boolean | undefined, id: string, type: UserTypeEnum, language?: string | undefined, theme?: string | undefined, notification?: boolean | undefined, company: { __typename?: 'Company', id: string, name: string } } | { __typename?: 'Trainer', id: string, type: UserTypeEnum, language?: string | undefined, theme?: string | undefined, notification?: boolean | undefined } | undefined, companies?: Array<{ __typename?: 'Company', id: string, name: string }> | undefined }; +export type SettingsPageDataQuery = ( + { __typename?: 'Query' } + & { currentUser?: Maybe<( + { __typename?: 'Admin' } + & Pick + ) | ( + { __typename?: 'Trainee' } + & Pick + & { company: ( + { __typename?: 'Company' } + & Pick + ) } + ) | ( + { __typename?: 'Trainer' } + & Pick + )>, companies?: Maybe + )>> } +); export type SignatureSettingsDataQueryVariables = Exact<{ [key: string]: never; }>; -export type SignatureSettingsDataQuery = { __typename?: 'Query', currentUser?: { __typename?: 'Admin', id: string, signature?: string | undefined } | { __typename?: 'Trainee', id: string, signature?: string | undefined } | { __typename?: 'Trainer', id: string, signature?: string | undefined } | undefined }; +export type SignatureSettingsDataQuery = ( + { __typename?: 'Query' } + & { currentUser?: Maybe<( + { __typename?: 'Admin' } + & Pick + ) | ( + { __typename?: 'Trainee' } + & Pick + ) | ( + { __typename?: 'Trainer' } + & Pick + )> } +); export type SuggestionsDataQueryVariables = Exact<{ [key: string]: never; }>; -export type SuggestionsDataQuery = { __typename?: 'Query', suggestions: Array }; +export type SuggestionsDataQuery = ( + { __typename?: 'Query' } + & Pick +); export type TraineePageDataQueryVariables = Exact<{ [key: string]: never; }>; -export type TraineePageDataQuery = { __typename?: 'Query', trainees: Array<{ __typename?: 'Trainee', id: string, username: string, firstName: string, lastName: string, course?: string | undefined, avatar: string, startDate?: string | undefined, trainer?: { __typename?: 'Trainer', id: string, firstName: string, lastName: string } | undefined, company: { __typename?: 'Company', id: string, name: string } }>, currentUser?: { __typename?: 'Admin', id: string } | { __typename?: 'Trainee', id: string } | { __typename?: 'Trainer', id: string } | undefined }; +export type TraineePageDataQuery = ( + { __typename?: 'Query' } + & { trainees: Array<( + { __typename?: 'Trainee' } + & Pick + & { trainer?: Maybe<( + { __typename?: 'Trainer' } + & Pick + )>, company: ( + { __typename?: 'Company' } + & Pick + ) } + )>, currentUser?: Maybe<( + { __typename?: 'Admin' } + & Pick + ) | ( + { __typename?: 'Trainee' } + & Pick + ) | ( + { __typename?: 'Trainer' } + & Pick + )> } +); export type TraineeSettingsDataQueryVariables = Exact<{ [key: string]: never; }>; -export type TraineeSettingsDataQuery = { __typename?: 'Query', currentUser?: { __typename?: 'Admin' } | { __typename: 'Trainee', id: string, startDate?: string | undefined, endDate?: string | undefined, course?: string | undefined, company: { __typename?: 'Company', id: string, name: string }, trainer?: { __typename?: 'Trainer', firstName: string, lastName: string, avatar: string } | undefined } | { __typename?: 'Trainer' } | undefined }; +export type TraineeSettingsDataQuery = ( + { __typename?: 'Query' } + & { currentUser?: Maybe<{ __typename?: 'Admin' } | ( + { __typename: 'Trainee' } + & Pick + & { company: ( + { __typename?: 'Company' } + & Pick + ), trainer?: Maybe<( + { __typename?: 'Trainer' } + & Pick + )> } + ) | { __typename?: 'Trainer' }> } +); export type TrainerReportsPageDataQueryVariables = Exact<{ [key: string]: never; }>; -export type TrainerReportsPageDataQuery = { __typename?: 'Query', currentUser?: { __typename?: 'Admin', id: string, theme?: string | undefined } | { __typename?: 'Trainee', id: string, theme?: string | undefined } | { __typename?: 'Trainer', id: string, theme?: string | undefined, trainees: Array<{ __typename?: 'Trainee', username: string, firstName: string, lastName: string, id: string, avatar: string, openReportsCount: number, reports: Array<{ __typename?: 'Report', id: string, status: ReportStatus, week: number, year: number, days: Array<{ __typename?: 'Day', status?: DayStatusEnum | undefined }> }> }> } | undefined }; +export type TrainerReportsPageDataQuery = ( + { __typename?: 'Query' } + & { currentUser?: Maybe<( + { __typename?: 'Admin' } + & Pick + ) | ( + { __typename?: 'Trainee' } + & Pick + ) | ( + { __typename?: 'Trainer' } + & Pick + & { trainees: Array<( + { __typename?: 'Trainee' } + & Pick + & { reports: Array<( + { __typename?: 'Report' } + & Pick + & { days: Array<( + { __typename?: 'Day' } + & Pick + )> } + )> } + )> } + )> } +); export type TrainersPageQueryVariables = Exact<{ [key: string]: never; }>; -export type TrainersPageQuery = { __typename?: 'Query', trainers: Array<{ __typename?: 'Trainer', id: string, firstName: string, lastName: string, avatar: string }> }; +export type TrainersPageQuery = ( + { __typename?: 'Query' } + & { trainers: Array<( + { __typename?: 'Trainer' } + & Pick + )> } +); export const ApplicationSettingsUpdateUserDocument = gql` diff --git a/serverless.yml b/serverless.yml index 592c424..740b33a 100644 --- a/serverless.yml +++ b/serverless.yml @@ -65,6 +65,7 @@ custom: user: ${self:custom.stage}-lara-user-table report: ${self:custom.stage}-lara-report-table company: ${self:custom.stage}-lara-company-table + paper: ${self:custom.stage}-lara-paper-table lambda: print: ${self:service}-${self:custom.stage}-print email: ${self:service}-${self:custom.stage}-email @@ -134,6 +135,7 @@ functions: Resource: - 'arn:aws:dynamodb:${opt:region, self:provider.region}:*:table/${self:custom.config.table.company}' - 'arn:aws:dynamodb:${opt:region, self:provider.region}:*:table/${self:custom.config.table.company}/index/*' + - 'arn:aws:dynamodb:${opt:region, self:provider.region}:*:table/${self:custom.config.table.paper}' - 'arn:aws:dynamodb:${opt:region, self:provider.region}:*:table/${self:custom.config.table.user}' - 'arn:aws:dynamodb:${opt:region, self:provider.region}:*:table/${self:custom.config.table.user}/index/*' - 'arn:aws:dynamodb:${opt:region, self:provider.region}:*:table/${self:custom.config.table.report}' @@ -150,6 +152,7 @@ functions: USER_TABLE: ${self:custom.config.table.user} REPORT_TABLE: ${self:custom.config.table.report} COMPANY_TABLE: ${self:custom.config.table.company} + PAPER_TABLE: ${self:custom.config.table.paper} PRINT_FUNCTION: ${self:custom.config.lambda.print} EMAIL_FUNCTION: ${self:custom.config.lambda.email} REPORT_WEEK_TRAINEEID_INDEX: ${self:custom.config.gsi.reportWeekTraineeId} @@ -346,6 +349,19 @@ resources: BillingMode: PAY_PER_REQUEST TableName: ${self:custom.config.table.company} + PaperTable: + Type: 'AWS::DynamoDB::Table' + DeletionPolicy: Delete + Properties: + AttributeDefinitions: + - AttributeName: id + AttributeType: S + KeySchema: + - AttributeName: id + KeyType: HASH + BillingMode: PAY_PER_REQUEST + TableName: ${self:custom.config.table.paper} + AttachmentsBucket: Type: AWS::S3::Bucket Properties: From 7af5d8801c161afb657e9cb07224dbe6648ccacf Mon Sep 17 00:00:00 2001 From: "alex.opoku" Date: Wed, 22 Feb 2023 12:00:14 +0100 Subject: [PATCH 03/55] feat: mentor creation --- packages/api/codegen.yml | 1 + packages/api/schema.gql | 55 +- packages/api/src/context.ts | 6 +- packages/api/src/graphql.ts | 574 +++---- packages/api/src/models.ts | 5 +- packages/backend/seeds/paper.json | 0 packages/backend/seeds/users.json | 15 + packages/backend/src/permissions.ts | 4 + .../backend/src/repositories/mentor.repo.ts | 13 + .../backend/src/resolvers/admin.resolver.ts | 45 +- packages/backend/src/resolvers/index.ts | 6 +- .../backend/src/resolvers/mentor.resolver.ts | 12 + .../backend/src/services/email.service.ts | 17 +- .../backend/src/services/mentor.service.ts | 50 + .../frontend/src/components/edit-user-row.tsx | 2 +- .../frontend/src/components/navigation.tsx | 16 + .../frontend/src/components/status-bar.tsx | 1 + packages/frontend/src/graphql/index.tsx | 1402 +++++------------ .../src/graphql/mutations/create-mentor.gql | 10 + .../src/graphql/mutations/update-mentor.gql | 10 + .../src/graphql/queries/admin-mentor-page.gql | 9 + .../src/graphql/queries/mentor-data.gql | 8 + packages/frontend/src/locales/de.ts | 14 + packages/frontend/src/locales/en.ts | 15 + packages/frontend/src/locales/translation.ts | 12 + .../frontend/src/pages/admin-mentor-page.tsx | 87 + packages/frontend/src/routes.tsx | 11 +- yarn.lock | 10 +- 28 files changed, 1098 insertions(+), 1312 deletions(-) create mode 100644 packages/backend/seeds/paper.json create mode 100644 packages/backend/src/repositories/mentor.repo.ts create mode 100644 packages/backend/src/resolvers/mentor.resolver.ts create mode 100644 packages/backend/src/services/mentor.service.ts create mode 100644 packages/frontend/src/graphql/mutations/create-mentor.gql create mode 100644 packages/frontend/src/graphql/mutations/update-mentor.gql create mode 100644 packages/frontend/src/graphql/queries/admin-mentor-page.gql create mode 100644 packages/frontend/src/graphql/queries/mentor-data.gql create mode 100644 packages/frontend/src/pages/admin-mentor-page.tsx diff --git a/packages/api/codegen.yml b/packages/api/codegen.yml index 9fc0692..cf35d78 100644 --- a/packages/api/codegen.yml +++ b/packages/api/codegen.yml @@ -21,5 +21,6 @@ generates: Report: ./models#Report Trainer: ./models#Trainer Trainee: ./models#Trainee + Mentor: ./models#Mentor UserInterface: ./models#UserInterface Paper: ./models#Paper diff --git a/packages/api/schema.gql b/packages/api/schema.gql index e5ed620..ceb40b7 100644 --- a/packages/api/schema.gql +++ b/packages/api/schema.gql @@ -202,6 +202,11 @@ type Mutation { """ createTrainer(input: CreateTrainerInput!): Trainer + """ + Creates Mentor. + """ + createMentor(input: CreateMentorInput!): Mentor + """ Marks User to be deleted """ @@ -222,6 +227,11 @@ type Mutation { """ updateTrainer(input: UpdateTrainerInput!, id: ID!): Trainer + """ + Updates Mentor. + """ + updateMentor(input: UpdateMentorInput!, id: ID!): Mentor + """ Link Alexa account """ @@ -308,6 +318,11 @@ type Query { """ trainers: [Trainer!]! + """ + Get all Trainers + """ + mentors: [Mentor!]! + """ Print single report or report batch """ @@ -437,12 +452,24 @@ input CreateTrainerInput { lastName: String! } +input CreateMentorInput { + email: String! + firstName: String! + lastName: String! +} + input UpdateTrainerInput { email: String firstName: String lastName: String } +input UpdateMentorInput { + email: String + firstName: String + lastName: String +} + type Trainer implements UserInterface { avatar: String! createdAt: String! @@ -461,6 +488,23 @@ type Trainer implements UserInterface { alexaSkillLinked: Boolean } +type Mentor implements UserInterface { + avatar: String! + createdAt: String! + firstName: String! + id: ID! + language: String + lastName: String! + notification: Boolean + signature: String + theme: String + type: UserTypeEnum! + username: String! + email: String! + deleteAt: String + alexaSkillLinked: Boolean +} + type Admin implements UserInterface { avatar: String! createdAt: String! @@ -516,6 +560,11 @@ enum UserTypeEnum { """ Trainer + """ + User is a Mentor + """ + Mentor + """ User is an Admin """ @@ -537,12 +586,6 @@ type PaperFormData { hint: String } -type Mentor { - name: String! - email: String! - signature: String! -} - type Paper { id: ID! trainee: Trainee! diff --git a/packages/api/src/context.ts b/packages/api/src/context.ts index 929f1cf..6a05d34 100644 --- a/packages/api/src/context.ts +++ b/packages/api/src/context.ts @@ -1,7 +1,7 @@ import { APIGatewayProxyEvent, Context as AWSContext } from 'aws-lambda' import { Request, Response } from 'express' -import { Trainee, Trainer, Admin, User } from './models' +import { Trainee, Trainer, Admin, Mentor, User } from './models' type ExpressContext = { req: Request @@ -29,6 +29,10 @@ export type TraineeContext = BaseContext & { currentUser: Trainee } +export type MentorContext = BaseContext & { + currentUser: Mentor +} + export type AdminContext = BaseContext & { currentUser: Admin } diff --git a/packages/api/src/graphql.ts b/packages/api/src/graphql.ts index e5274ff..85fb997 100644 --- a/packages/api/src/graphql.ts +++ b/packages/api/src/graphql.ts @@ -1,12 +1,13 @@ import { GraphQLResolveInfo } from 'graphql'; -import { CommentableInterface, Comment, Entry, Day, Report, Trainer, Trainee, UserInterface, Paper } from './models'; +import { CommentableInterface, Comment, Entry, Day, Report, Trainer, Trainee, Mentor, UserInterface, Paper } from './models'; import { Context } from './context'; export type Maybe = T | undefined; +export type InputMaybe = T | undefined; export type Exact = { [K in keyof T]: T[K] }; export type MakeOptional = Omit & { [SubKey in K]?: Maybe }; export type MakeMaybe = Omit & { [SubKey in K]: Maybe }; export type Omit = Pick>; -export type RequireFields = { [X in Exclude]?: T[X] } & { [P in K]-?: NonNullable }; +export type RequireFields = Omit & { [P in K]-?: NonNullable }; /** All built-in and custom scalars, mapped to their actual values */ export type Scalars = { ID: string; @@ -18,25 +19,25 @@ export type Scalars = { export type GqlAdmin = GqlUserInterface & { __typename?: 'Admin'; + alexaSkillLinked?: Maybe; avatar: Scalars['String']; createdAt: Scalars['String']; + email: Scalars['String']; firstName: Scalars['String']; id: Scalars['ID']; language?: Maybe; lastName: Scalars['String']; notification?: Maybe; + signature?: Maybe; theme?: Maybe; type: GqlUserTypeEnum; username: Scalars['String']; - email: Scalars['String']; - signature?: Maybe; - alexaSkillLinked?: Maybe; }; export type GqlAnswerPaperInput = { + answer: Scalars['String']; id: Scalars['ID']; questionId: Scalars['ID']; - answer: Scalars['String']; }; export type GqlComment = { @@ -66,14 +67,20 @@ export type GqlCreateCommentPayload = { commentable: GqlCommentableInterface; }; -export type GqlCreateTraineeInput = { +export type GqlCreateMentorInput = { + email: Scalars['String']; firstName: Scalars['String']; lastName: Scalars['String']; +}; + +export type GqlCreateTraineeInput = { + companyId: Scalars['String']; email: Scalars['String']; - startDate: Scalars['String']; endDate: Scalars['String']; + firstName: Scalars['String']; + lastName: Scalars['String']; + startDate: Scalars['String']; startOfToolUsage: Scalars['String']; - companyId: Scalars['String']; }; export type GqlCreateTrainerInput = { @@ -93,16 +100,16 @@ export type GqlDay = GqlCommentableInterface & { }; export type GqlDayStatusEnum = - /** workday */ - | 'work' - /** vacation */ - | 'vacation' - /** sick leave */ - | 'sick' /** school/university */ | 'education' /** public holiday */ - | 'holiday'; + | 'holiday' + /** sick leave */ + | 'sick' + /** vacation */ + | 'vacation' + /** workday */ + | 'work'; /** Autogenerated return type of DevSetUser */ export type GqlDevSetUserPayload = { @@ -127,27 +134,38 @@ export type GqlEntryInput = { export type GqlLaraConfig = { __typename?: 'LaraConfig'; - minWorkDayMinutes: Scalars['Int']; - maxWorkDayMinutes: Scalars['Int']; expectedWorkDayMinutes: Scalars['Int']; - minEducationDayMinutes: Scalars['Int']; + finishedWeekDayCount: Scalars['Int']; maxEducationDayMinutes: Scalars['Int']; maxEntryMinutes: Scalars['Int']; maxPeriodYearsCount: Scalars['Int']; - finishedWeekDayCount: Scalars['Int']; + maxWorkDayMinutes: Scalars['Int']; + minEducationDayMinutes: Scalars['Int']; + minWorkDayMinutes: Scalars['Int']; }; -export type GqlMentor = { +export type GqlMentor = GqlUserInterface & { __typename?: 'Mentor'; - name: Scalars['String']; + alexaSkillLinked?: Maybe; + avatar: Scalars['String']; + createdAt: Scalars['String']; + deleteAt?: Maybe; email: Scalars['String']; - signature: Scalars['String']; + firstName: Scalars['String']; + id: Scalars['ID']; + language?: Maybe; + lastName: Scalars['String']; + notification?: Maybe; + signature?: Maybe; + theme?: Maybe; + type: GqlUserTypeEnum; + username: Scalars['String']; }; export type GqlMentorInput = { - name?: Maybe; - email?: Maybe; - signature?: Maybe; + email?: InputMaybe; + name?: InputMaybe; + signature?: InputMaybe; }; export type GqlMutateEntryPayload = { @@ -163,6 +181,8 @@ export type GqlMutation = { _devloginuser?: Maybe; /** [DEV] Sets the users type. */ _devsetusertype: GqlDevSetUserPayload; + /** Update Paper */ + answerPaper: GqlPaperFormData; /** Claims a Trainee by the current Trainer */ claimTrainee?: Maybe; /** Creates a new comment on a Day which is identified by the id argument. */ @@ -173,12 +193,32 @@ export type GqlMutation = { createCommentOnReport: GqlCreateCommentPayload; /** Creates a new entry which is assigned to the matching report based on the day Id */ createEntry: GqlMutateEntryPayload; + /** Creates Mentor. */ + createMentor?: Maybe; + /** Create OAuth Code */ + createOAuthCode: Scalars['String']; + /** Creates Trainee. */ + createTrainee?: Maybe; + /** Creates Trainer. */ + createTrainer?: Maybe; /** Deletes an entry by the given ID. Only considers entries made by the current user. Returns the ID of the deleted entry. */ deleteEntry: GqlMutateEntryPayload; + /** Delete Paper */ + deletePaper: Scalars['Boolean']; + /** Link Alexa account */ + linkAlexa?: Maybe; /** Login via google. */ login?: Maybe; + /** Marks User to be deleted */ + markUserForDeletion?: Maybe; + /** Create Paper */ + postPaper: GqlPaper; /** Unclaims a Trainee by the current Trainer */ unclaimTrainee?: Maybe; + /** Unlink Alexa account */ + unlinkAlexa?: Maybe; + /** Unmarks User from deletion */ + unmarkUserForDeletion?: Maybe; /** Updates the current trainee */ updateCurrentTrainee?: Maybe; /** Updates the current user */ @@ -187,32 +227,14 @@ export type GqlMutation = { updateDay?: Maybe; updateEntry: GqlMutateEntryPayload; updateEntryOrder: GqlMutateEntryPayload; + /** Updates Mentor. */ + updateMentor?: Maybe; /** Updates report which is identified by the id argument. */ updateReport?: Maybe; - /** Creates Trainee. */ - createTrainee?: Maybe; - /** Creates Trainer. */ - createTrainer?: Maybe; - /** Marks User to be deleted */ - markUserForDeletion?: Maybe; - /** Unmarks User from deletion */ - unmarkUserForDeletion?: Maybe; /** Updates Trainee. */ updateTrainee?: Maybe; /** Updates Trainer. */ updateTrainer?: Maybe; - /** Link Alexa account */ - linkAlexa?: Maybe; - /** Unlink Alexa account */ - unlinkAlexa?: Maybe; - /** Create OAuth Code */ - createOAuthCode: Scalars['String']; - /** Create Paper */ - postPaper: GqlPaper; - /** Delete Paper */ - deletePaper: Scalars['Boolean']; - /** Update Paper */ - answerPaper: GqlPaperFormData; }; @@ -226,28 +248,33 @@ export type GqlMutation_DevsetusertypeArgs = { }; +export type GqlMutationAnswerPaperArgs = { + input: GqlAnswerPaperInput; +}; + + export type GqlMutationClaimTraineeArgs = { id: Scalars['ID']; }; export type GqlMutationCreateCommentOnDayArgs = { - text: Scalars['String']; id: Scalars['ID']; + text: Scalars['String']; traineeId: Scalars['ID']; }; export type GqlMutationCreateCommentOnEntryArgs = { - text: Scalars['String']; id: Scalars['ID']; + text: Scalars['String']; traineeId: Scalars['ID']; }; export type GqlMutationCreateCommentOnReportArgs = { - text: Scalars['String']; id: Scalars['ID']; + text: Scalars['String']; traineeId: Scalars['ID']; }; @@ -258,158 +285,164 @@ export type GqlMutationCreateEntryArgs = { }; -export type GqlMutationDeleteEntryArgs = { - id: Scalars['ID']; +export type GqlMutationCreateMentorArgs = { + input: GqlCreateMentorInput; }; -export type GqlMutationLoginArgs = { - googleToken: Scalars['String']; +export type GqlMutationCreateTraineeArgs = { + input: GqlCreateTraineeInput; }; -export type GqlMutationUnclaimTraineeArgs = { +export type GqlMutationCreateTrainerArgs = { + input: GqlCreateTrainerInput; +}; + + +export type GqlMutationDeleteEntryArgs = { id: Scalars['ID']; }; -export type GqlMutationUpdateCurrentTraineeArgs = { - input: GqlUpdateCurrentTraineeInput; +export type GqlMutationDeletePaperArgs = { + id: Scalars['ID']; }; -export type GqlMutationUpdateCurrentUserArgs = { - input?: Maybe; +export type GqlMutationLinkAlexaArgs = { + code: Scalars['String']; + state: Scalars['String']; }; -export type GqlMutationUpdateDayArgs = { - status?: Maybe; - id: Scalars['ID']; +export type GqlMutationLoginArgs = { + googleToken: Scalars['String']; }; -export type GqlMutationUpdateEntryArgs = { +export type GqlMutationMarkUserForDeletionArgs = { id: Scalars['ID']; - input: GqlEntryInput; }; -export type GqlMutationUpdateEntryOrderArgs = { - entryId: Scalars['ID']; - dayId: Scalars['ID']; - orderId: Scalars['Int']; +export type GqlMutationPostPaperArgs = { + id?: InputMaybe; + input: GqlPaperInput; }; -export type GqlMutationUpdateReportArgs = { - summary?: Maybe; - department?: Maybe; - status?: Maybe; +export type GqlMutationUnclaimTraineeArgs = { id: Scalars['ID']; }; -export type GqlMutationCreateTraineeArgs = { - input: GqlCreateTraineeInput; +export type GqlMutationUnmarkUserForDeletionArgs = { + id: Scalars['ID']; }; -export type GqlMutationCreateTrainerArgs = { - input: GqlCreateTrainerInput; +export type GqlMutationUpdateCurrentTraineeArgs = { + input: GqlUpdateCurrentTraineeInput; }; -export type GqlMutationMarkUserForDeletionArgs = { - id: Scalars['ID']; +export type GqlMutationUpdateCurrentUserArgs = { + input?: InputMaybe; }; -export type GqlMutationUnmarkUserForDeletionArgs = { +export type GqlMutationUpdateDayArgs = { id: Scalars['ID']; + status?: InputMaybe; }; -export type GqlMutationUpdateTraineeArgs = { - input: GqlUpdateTraineeInput; +export type GqlMutationUpdateEntryArgs = { id: Scalars['ID']; + input: GqlEntryInput; }; -export type GqlMutationUpdateTrainerArgs = { - input: GqlUpdateTrainerInput; - id: Scalars['ID']; +export type GqlMutationUpdateEntryOrderArgs = { + dayId: Scalars['ID']; + entryId: Scalars['ID']; + orderId: Scalars['Int']; }; -export type GqlMutationLinkAlexaArgs = { - code: Scalars['String']; - state: Scalars['String']; +export type GqlMutationUpdateMentorArgs = { + id: Scalars['ID']; + input: GqlUpdateMentorInput; }; -export type GqlMutationPostPaperArgs = { - input: GqlPaperInput; - id?: Maybe; +export type GqlMutationUpdateReportArgs = { + department?: InputMaybe; + id: Scalars['ID']; + status?: InputMaybe; + summary?: InputMaybe; }; -export type GqlMutationDeletePaperArgs = { +export type GqlMutationUpdateTraineeArgs = { id: Scalars['ID']; + input: GqlUpdateTraineeInput; }; -export type GqlMutationAnswerPaperArgs = { - input: GqlAnswerPaperInput; +export type GqlMutationUpdateTrainerArgs = { + id: Scalars['ID']; + input: GqlUpdateTrainerInput; }; export type GqlOAuthPayload = { __typename?: 'OAuthPayload'; accessToken: Scalars['String']; - refreshToken?: Maybe; expiresIn: Scalars['Int']; + refreshToken?: Maybe; }; export type GqlPaper = { __typename?: 'Paper'; - id: Scalars['ID']; - trainee: GqlTrainee; - status: GqlPaperStatus; - traineeForm: Array; - trainerForm: Array; - conclusion?: Maybe; archivedAt?: Maybe; - createdAt: Scalars['String']; client: Scalars['String']; + conclusion?: Maybe; + createdAt: Scalars['String']; + id: Scalars['ID']; mentor: GqlMentor; - periodStart: Scalars['String']; periodEnd: Scalars['String']; + periodStart: Scalars['String']; + status: GqlPaperStatus; subject: Scalars['String']; + trainee: GqlTrainee; + traineeForm: Array; + trainerForm: Array; }; export type GqlPaperFormData = { __typename?: 'PaperFormData'; - id: Scalars['ID']; - question: Scalars['String']; answer?: Maybe; hint?: Maybe; + id: Scalars['ID']; + question: Scalars['String']; }; export type GqlPaperInput = { - client?: Maybe; - mentor?: Maybe; - periodStart?: Maybe; - periodEnd?: Maybe; - subject?: Maybe; - status?: Maybe; + client?: InputMaybe; + mentor?: InputMaybe; + periodEnd?: InputMaybe; + periodStart?: InputMaybe; + status?: InputMaybe; + subject?: InputMaybe; }; export type GqlPaperStatus = + | 'Archived' | 'InProgress' - | 'TraineeDone' - | 'MentorDone' | 'InReview' - | 'Archived'; + | 'MentorDone' + | 'TraineeDone'; export type GqlPrintPayload = { __typename?: 'PrintPayload'; @@ -418,10 +451,22 @@ export type GqlPrintPayload = { export type GqlQuery = { __typename?: 'Query'; - config: GqlLaraConfig; + /** Get the alexa account linking url */ + alexaLinkingUrl?: Maybe; + /** Will look for Users to delete */ + cleanup: Scalars['Boolean']; companies?: Maybe>; + config: GqlLaraConfig; /** Returns the logged in user. This user can be either a Trainee or a Trainer. */ currentUser?: Maybe; + /** Get the PAPER */ + getPaper?: Maybe; + /** Get a User by ID */ + getUser?: Maybe; + /** Get all Trainers */ + mentors: Array; + /** Print single report or report batch */ + print: GqlPrintPayload; /** Finds the report for a specifig trainee on the requested year and week. */ reportForTrainee?: Maybe; /** Finds the report for the requested year and week. */ @@ -434,34 +479,17 @@ export type GqlQuery = { trainees: Array; /** Get all Trainers */ trainers: Array; - /** Print single report or report batch */ - print: GqlPrintPayload; - /** Get a User by ID */ - getUser?: Maybe; - /** Will look for Users to delete */ - cleanup: Scalars['Boolean']; - /** Get the alexa account linking url */ - alexaLinkingUrl?: Maybe; - /** Get the PAPER */ - getPaper?: Maybe; }; -export type GqlQueryReportForTraineeArgs = { - year: Scalars['Int']; - week: Scalars['Int']; +export type GqlQueryGetPaperArgs = { id: Scalars['ID']; + token?: InputMaybe; }; -export type GqlQueryReportForYearAndWeekArgs = { - year: Scalars['Int']; - week: Scalars['Int']; -}; - - -export type GqlQueryReportsArgs = { - statuses?: Maybe>; +export type GqlQueryGetUserArgs = { + id: Scalars['ID']; }; @@ -470,14 +498,21 @@ export type GqlQueryPrintArgs = { }; -export type GqlQueryGetUserArgs = { +export type GqlQueryReportForTraineeArgs = { id: Scalars['ID']; + week: Scalars['Int']; + year: Scalars['Int']; }; -export type GqlQueryGetPaperArgs = { - id: Scalars['ID']; - token?: Maybe; +export type GqlQueryReportForYearAndWeekArgs = { + week: Scalars['Int']; + year: Scalars['Int']; +}; + + +export type GqlQueryReportsArgs = { + statuses?: InputMaybe>; }; export type GqlReport = GqlCommentableInterface & { @@ -487,33 +522,36 @@ export type GqlReport = GqlCommentableInterface & { days: Array; department?: Maybe; id: Scalars['ID']; + nextReportLink?: Maybe; + previousReportLink?: Maybe; + reportAccepted?: Maybe; status: GqlReportStatus; summary?: Maybe; week: Scalars['Int']; year: Scalars['Int']; - reportAccepted?: Maybe; - previousReportLink?: Maybe; - nextReportLink?: Maybe; }; /** Represents the current state of the report */ export type GqlReportStatus = - /** Report is open */ - | 'todo' - /** Passes the report to the trainer */ - | 'review' + /** Done reports are marked as archived */ + | 'archived' /** Used if there is any problem with a report */ | 'reopened' - /** Done reports are marked as archived */ - | 'archived'; + /** Passes the report to the trainer */ + | 'review' + /** Report is open */ + | 'todo'; export type GqlTrainee = GqlUserInterface & { __typename?: 'Trainee'; + alexaSkillLinked?: Maybe; /** The url for the users avatar image. */ avatar: Scalars['String']; company: GqlCompany; course?: Maybe; createdAt: Scalars['String']; + deleteAt?: Maybe; + email: Scalars['String']; endDate?: Maybe; endOfToolUsage?: Maybe; firstName: Scalars['String']; @@ -521,6 +559,7 @@ export type GqlTrainee = GqlUserInterface & { language?: Maybe; lastName: Scalars['String']; notification?: Maybe; + openReportsCount: Scalars['Int']; reports: Array; signature?: Maybe; startDate?: Maybe; @@ -529,16 +568,15 @@ export type GqlTrainee = GqlUserInterface & { trainer?: Maybe; type: GqlUserTypeEnum; username: Scalars['String']; - email: Scalars['String']; - deleteAt?: Maybe; - openReportsCount: Scalars['Int']; - alexaSkillLinked?: Maybe; }; export type GqlTrainer = GqlUserInterface & { __typename?: 'Trainer'; + alexaSkillLinked?: Maybe; avatar: Scalars['String']; createdAt: Scalars['String']; + deleteAt?: Maybe; + email: Scalars['String']; firstName: Scalars['String']; id: Scalars['ID']; language?: Maybe; @@ -549,9 +587,6 @@ export type GqlTrainer = GqlUserInterface & { trainees: Array; type: GqlUserTypeEnum; username: Scalars['String']; - email: Scalars['String']; - deleteAt?: Maybe; - alexaSkillLinked?: Maybe; }; export type GqlTrainerTraineePayload = { @@ -561,41 +596,49 @@ export type GqlTrainerTraineePayload = { }; export type GqlUpdateCurrentTraineeInput = { - course?: Maybe; + course?: InputMaybe; +}; + +export type GqlUpdateMentorInput = { + email?: InputMaybe; + firstName?: InputMaybe; + lastName?: InputMaybe; }; export type GqlUpdateReportPayload = { __typename?: 'UpdateReportPayload'; - trainee: GqlTrainee; report: GqlReport; + trainee: GqlTrainee; }; export type GqlUpdateTraineeInput = { - firstName?: Maybe; - lastName?: Maybe; - email?: Maybe; - startDate?: Maybe; - endDate?: Maybe; - startOfToolUsage?: Maybe; - companyId?: Maybe; + companyId?: InputMaybe; + email?: InputMaybe; + endDate?: InputMaybe; + firstName?: InputMaybe; + lastName?: InputMaybe; + startDate?: InputMaybe; + startOfToolUsage?: InputMaybe; }; export type GqlUpdateTrainerInput = { - email?: Maybe; - firstName?: Maybe; - lastName?: Maybe; + email?: InputMaybe; + firstName?: InputMaybe; + lastName?: InputMaybe; }; export type GqlUserInput = { - language?: Maybe; - theme?: Maybe; - signature?: Maybe; - notification?: Maybe; + language?: InputMaybe; + notification?: InputMaybe; + signature?: InputMaybe; + theme?: InputMaybe; }; export type GqlUserInterface = { + alexaSkillLinked?: Maybe; avatar: Scalars['String']; createdAt: Scalars['String']; + email: Scalars['String']; firstName: Scalars['String']; id: Scalars['ID']; language?: Maybe; @@ -605,17 +648,17 @@ export type GqlUserInterface = { theme?: Maybe; type: GqlUserTypeEnum; username: Scalars['String']; - email: Scalars['String']; - alexaSkillLinked?: Maybe; }; export type GqlUserTypeEnum = + /** User is an Admin */ + | 'Admin' + /** User is a Mentor */ + | 'Mentor' /** User is a Trainee */ | 'Trainee' /** User is a Trainer */ - | 'Trainer' - /** User is an Admin */ - | 'Admin'; + | 'Trainer'; export type WithIndex = TObject & Record; export type ResolversObject = WithIndex; @@ -626,21 +669,7 @@ export type ResolverTypeWrapper = Promise | T; export type ResolverWithResolve = { resolve: ResolverFn; }; - -export type LegacyStitchingResolver = { - fragment: string; - resolve: ResolverFn; -}; - -export type NewStitchingResolver = { - selectionSet: string; - resolve: ResolverFn; -}; -export type StitchingResolver = LegacyStitchingResolver | NewStitchingResolver; -export type Resolver = - | ResolverFn - | ResolverWithResolve - | StitchingResolver; +export type Resolver = ResolverFn | ResolverWithResolve; export type ResolverFn = ( parent: TParent, @@ -654,7 +683,7 @@ export type SubscriptionSubscribeFn = ( args: TArgs, context: TContext, info: GraphQLResolveInfo -) => AsyncIterator | Promise>; +) => AsyncIterable | Promise>; export type SubscriptionResolveFn = ( parent: TParent, @@ -702,24 +731,24 @@ export type DirectiveResolverFn; - String: ResolverTypeWrapper; - ID: ResolverTypeWrapper; - Boolean: ResolverTypeWrapper; AnswerPaperInput: GqlAnswerPaperInput; + Boolean: ResolverTypeWrapper; Comment: ResolverTypeWrapper; CommentableInterface: ResolverTypeWrapper; Company: ResolverTypeWrapper; CreateCommentPayload: ResolverTypeWrapper & { comment: GqlResolversTypes['Comment'], commentable: GqlResolversTypes['CommentableInterface'] }>; + CreateMentorInput: GqlCreateMentorInput; CreateTraineeInput: GqlCreateTraineeInput; CreateTrainerInput: GqlCreateTrainerInput; Day: ResolverTypeWrapper; DayStatusEnum: GqlDayStatusEnum; DevSetUserPayload: ResolverTypeWrapper & { user?: Maybe }>; Entry: ResolverTypeWrapper; - Int: ResolverTypeWrapper; EntryInput: GqlEntryInput; + ID: ResolverTypeWrapper; + Int: ResolverTypeWrapper; LaraConfig: ResolverTypeWrapper; - Mentor: ResolverTypeWrapper; + Mentor: ResolverTypeWrapper; MentorInput: GqlMentorInput; MutateEntryPayload: ResolverTypeWrapper & { day: GqlResolversTypes['Day'], entry?: Maybe, report: GqlResolversTypes['Report'] }>; Mutation: ResolverTypeWrapper<{}>; @@ -732,11 +761,13 @@ export type GqlResolversTypes = ResolversObject<{ Query: ResolverTypeWrapper<{}>; Report: ResolverTypeWrapper; ReportStatus: GqlReportStatus; + String: ResolverTypeWrapper; Trainee: ResolverTypeWrapper; Trainer: ResolverTypeWrapper; TrainerTraineePayload: ResolverTypeWrapper & { trainee: GqlResolversTypes['Trainee'], trainer: GqlResolversTypes['Trainer'] }>; UpdateCurrentTraineeInput: GqlUpdateCurrentTraineeInput; - UpdateReportPayload: ResolverTypeWrapper & { trainee: GqlResolversTypes['Trainee'], report: GqlResolversTypes['Report'] }>; + UpdateMentorInput: GqlUpdateMentorInput; + UpdateReportPayload: ResolverTypeWrapper & { report: GqlResolversTypes['Report'], trainee: GqlResolversTypes['Trainee'] }>; UpdateTraineeInput: GqlUpdateTraineeInput; UpdateTrainerInput: GqlUpdateTrainerInput; UserInput: GqlUserInput; @@ -747,23 +778,23 @@ export type GqlResolversTypes = ResolversObject<{ /** Mapping between all available schema types and the resolvers parents */ export type GqlResolversParentTypes = ResolversObject<{ Admin: GqlAdmin; - String: Scalars['String']; - ID: Scalars['ID']; - Boolean: Scalars['Boolean']; AnswerPaperInput: GqlAnswerPaperInput; + Boolean: Scalars['Boolean']; Comment: Comment; CommentableInterface: CommentableInterface; Company: GqlCompany; CreateCommentPayload: Omit & { comment: GqlResolversParentTypes['Comment'], commentable: GqlResolversParentTypes['CommentableInterface'] }; + CreateMentorInput: GqlCreateMentorInput; CreateTraineeInput: GqlCreateTraineeInput; CreateTrainerInput: GqlCreateTrainerInput; Day: Day; DevSetUserPayload: Omit & { user?: Maybe }; Entry: Entry; - Int: Scalars['Int']; EntryInput: GqlEntryInput; + ID: Scalars['ID']; + Int: Scalars['Int']; LaraConfig: GqlLaraConfig; - Mentor: GqlMentor; + Mentor: Mentor; MentorInput: GqlMentorInput; MutateEntryPayload: Omit & { day: GqlResolversParentTypes['Day'], entry?: Maybe, report: GqlResolversParentTypes['Report'] }; Mutation: {}; @@ -774,11 +805,13 @@ export type GqlResolversParentTypes = ResolversObject<{ PrintPayload: GqlPrintPayload; Query: {}; Report: Report; + String: Scalars['String']; Trainee: Trainee; Trainer: Trainer; TrainerTraineePayload: Omit & { trainee: GqlResolversParentTypes['Trainee'], trainer: GqlResolversParentTypes['Trainer'] }; UpdateCurrentTraineeInput: GqlUpdateCurrentTraineeInput; - UpdateReportPayload: Omit & { trainee: GqlResolversParentTypes['Trainee'], report: GqlResolversParentTypes['Report'] }; + UpdateMentorInput: GqlUpdateMentorInput; + UpdateReportPayload: Omit & { report: GqlResolversParentTypes['Report'], trainee: GqlResolversParentTypes['Trainee'] }; UpdateTraineeInput: GqlUpdateTraineeInput; UpdateTrainerInput: GqlUpdateTrainerInput; UserInput: GqlUserInput; @@ -786,19 +819,19 @@ export type GqlResolversParentTypes = ResolversObject<{ }>; export type GqlAdminResolvers = ResolversObject<{ + alexaSkillLinked?: Resolver, ParentType, ContextType>; avatar?: Resolver; createdAt?: Resolver; + email?: Resolver; firstName?: Resolver; id?: Resolver; language?: Resolver, ParentType, ContextType>; lastName?: Resolver; notification?: Resolver, ParentType, ContextType>; + signature?: Resolver, ParentType, ContextType>; theme?: Resolver, ParentType, ContextType>; type?: Resolver; username?: Resolver; - email?: Resolver; - signature?: Resolver, ParentType, ContextType>; - alexaSkillLinked?: Resolver, ParentType, ContextType>; __isTypeOf?: IsTypeOfResolverFn; }>; @@ -855,21 +888,32 @@ export type GqlEntryResolvers; export type GqlLaraConfigResolvers = ResolversObject<{ - minWorkDayMinutes?: Resolver; - maxWorkDayMinutes?: Resolver; expectedWorkDayMinutes?: Resolver; - minEducationDayMinutes?: Resolver; + finishedWeekDayCount?: Resolver; maxEducationDayMinutes?: Resolver; maxEntryMinutes?: Resolver; maxPeriodYearsCount?: Resolver; - finishedWeekDayCount?: Resolver; + maxWorkDayMinutes?: Resolver; + minEducationDayMinutes?: Resolver; + minWorkDayMinutes?: Resolver; __isTypeOf?: IsTypeOfResolverFn; }>; export type GqlMentorResolvers = ResolversObject<{ - name?: Resolver; + alexaSkillLinked?: Resolver, ParentType, ContextType>; + avatar?: Resolver; + createdAt?: Resolver; + deleteAt?: Resolver, ParentType, ContextType>; email?: Resolver; - signature?: Resolver; + firstName?: Resolver; + id?: Resolver; + language?: Resolver, ParentType, ContextType>; + lastName?: Resolver; + notification?: Resolver, ParentType, ContextType>; + signature?: Resolver, ParentType, ContextType>; + theme?: Resolver, ParentType, ContextType>; + type?: Resolver; + username?: Resolver; __isTypeOf?: IsTypeOfResolverFn; }>; @@ -883,63 +927,65 @@ export type GqlMutateEntryPayloadResolvers = ResolversObject<{ _devloginuser?: Resolver, ParentType, ContextType, RequireFields>; _devsetusertype?: Resolver>; + answerPaper?: Resolver>; claimTrainee?: Resolver, ParentType, ContextType, RequireFields>; - createCommentOnDay?: Resolver>; - createCommentOnEntry?: Resolver>; - createCommentOnReport?: Resolver>; + createCommentOnDay?: Resolver>; + createCommentOnEntry?: Resolver>; + createCommentOnReport?: Resolver>; createEntry?: Resolver>; + createMentor?: Resolver, ParentType, ContextType, RequireFields>; + createOAuthCode?: Resolver; + createTrainee?: Resolver, ParentType, ContextType, RequireFields>; + createTrainer?: Resolver, ParentType, ContextType, RequireFields>; deleteEntry?: Resolver>; + deletePaper?: Resolver>; + linkAlexa?: Resolver, ParentType, ContextType, RequireFields>; login?: Resolver, ParentType, ContextType, RequireFields>; + markUserForDeletion?: Resolver, ParentType, ContextType, RequireFields>; + postPaper?: Resolver>; unclaimTrainee?: Resolver, ParentType, ContextType, RequireFields>; + unlinkAlexa?: Resolver, ParentType, ContextType>; + unmarkUserForDeletion?: Resolver, ParentType, ContextType, RequireFields>; updateCurrentTrainee?: Resolver, ParentType, ContextType, RequireFields>; - updateCurrentUser?: Resolver, ParentType, ContextType, RequireFields>; + updateCurrentUser?: Resolver, ParentType, ContextType, Partial>; updateDay?: Resolver, ParentType, ContextType, RequireFields>; updateEntry?: Resolver>; - updateEntryOrder?: Resolver>; + updateEntryOrder?: Resolver>; + updateMentor?: Resolver, ParentType, ContextType, RequireFields>; updateReport?: Resolver, ParentType, ContextType, RequireFields>; - createTrainee?: Resolver, ParentType, ContextType, RequireFields>; - createTrainer?: Resolver, ParentType, ContextType, RequireFields>; - markUserForDeletion?: Resolver, ParentType, ContextType, RequireFields>; - unmarkUserForDeletion?: Resolver, ParentType, ContextType, RequireFields>; - updateTrainee?: Resolver, ParentType, ContextType, RequireFields>; - updateTrainer?: Resolver, ParentType, ContextType, RequireFields>; - linkAlexa?: Resolver, ParentType, ContextType, RequireFields>; - unlinkAlexa?: Resolver, ParentType, ContextType>; - createOAuthCode?: Resolver; - postPaper?: Resolver>; - deletePaper?: Resolver>; - answerPaper?: Resolver>; + updateTrainee?: Resolver, ParentType, ContextType, RequireFields>; + updateTrainer?: Resolver, ParentType, ContextType, RequireFields>; }>; export type GqlOAuthPayloadResolvers = ResolversObject<{ accessToken?: Resolver; - refreshToken?: Resolver, ParentType, ContextType>; expiresIn?: Resolver; + refreshToken?: Resolver, ParentType, ContextType>; __isTypeOf?: IsTypeOfResolverFn; }>; export type GqlPaperResolvers = ResolversObject<{ - id?: Resolver; - trainee?: Resolver; - status?: Resolver; - traineeForm?: Resolver, ParentType, ContextType>; - trainerForm?: Resolver, ParentType, ContextType>; - conclusion?: Resolver, ParentType, ContextType>; archivedAt?: Resolver, ParentType, ContextType>; - createdAt?: Resolver; client?: Resolver; + conclusion?: Resolver, ParentType, ContextType>; + createdAt?: Resolver; + id?: Resolver; mentor?: Resolver; - periodStart?: Resolver; periodEnd?: Resolver; + periodStart?: Resolver; + status?: Resolver; subject?: Resolver; + trainee?: Resolver; + traineeForm?: Resolver, ParentType, ContextType>; + trainerForm?: Resolver, ParentType, ContextType>; __isTypeOf?: IsTypeOfResolverFn; }>; export type GqlPaperFormDataResolvers = ResolversObject<{ - id?: Resolver; - question?: Resolver; answer?: Resolver, ParentType, ContextType>; hint?: Resolver, ParentType, ContextType>; + id?: Resolver; + question?: Resolver; __isTypeOf?: IsTypeOfResolverFn; }>; @@ -949,20 +995,21 @@ export type GqlPrintPayloadResolvers; export type GqlQueryResolvers = ResolversObject<{ - config?: Resolver; + alexaLinkingUrl?: Resolver, ParentType, ContextType>; + cleanup?: Resolver; companies?: Resolver>, ParentType, ContextType>; + config?: Resolver; currentUser?: Resolver, ParentType, ContextType>; - reportForTrainee?: Resolver, ParentType, ContextType, RequireFields>; - reportForYearAndWeek?: Resolver, ParentType, ContextType, RequireFields>; - reports?: Resolver>, ParentType, ContextType, RequireFields>; + getPaper?: Resolver, ParentType, ContextType, RequireFields>; + getUser?: Resolver, ParentType, ContextType, RequireFields>; + mentors?: Resolver, ParentType, ContextType>; + print?: Resolver>; + reportForTrainee?: Resolver, ParentType, ContextType, RequireFields>; + reportForYearAndWeek?: Resolver, ParentType, ContextType, RequireFields>; + reports?: Resolver>, ParentType, ContextType, Partial>; suggestions?: Resolver, ParentType, ContextType>; trainees?: Resolver, ParentType, ContextType>; trainers?: Resolver, ParentType, ContextType>; - print?: Resolver>; - getUser?: Resolver, ParentType, ContextType, RequireFields>; - cleanup?: Resolver; - alexaLinkingUrl?: Resolver, ParentType, ContextType>; - getPaper?: Resolver, ParentType, ContextType, RequireFields>; }>; export type GqlReportResolvers = ResolversObject<{ @@ -971,21 +1018,24 @@ export type GqlReportResolvers, ParentType, ContextType>; department?: Resolver, ParentType, ContextType>; id?: Resolver; + nextReportLink?: Resolver, ParentType, ContextType>; + previousReportLink?: Resolver, ParentType, ContextType>; + reportAccepted?: Resolver, ParentType, ContextType>; status?: Resolver; summary?: Resolver, ParentType, ContextType>; week?: Resolver; year?: Resolver; - reportAccepted?: Resolver, ParentType, ContextType>; - previousReportLink?: Resolver, ParentType, ContextType>; - nextReportLink?: Resolver, ParentType, ContextType>; __isTypeOf?: IsTypeOfResolverFn; }>; export type GqlTraineeResolvers = ResolversObject<{ + alexaSkillLinked?: Resolver, ParentType, ContextType>; avatar?: Resolver; company?: Resolver; course?: Resolver, ParentType, ContextType>; createdAt?: Resolver; + deleteAt?: Resolver, ParentType, ContextType>; + email?: Resolver; endDate?: Resolver, ParentType, ContextType>; endOfToolUsage?: Resolver, ParentType, ContextType>; firstName?: Resolver; @@ -993,6 +1043,7 @@ export type GqlTraineeResolvers, ParentType, ContextType>; lastName?: Resolver; notification?: Resolver, ParentType, ContextType>; + openReportsCount?: Resolver; reports?: Resolver, ParentType, ContextType>; signature?: Resolver, ParentType, ContextType>; startDate?: Resolver, ParentType, ContextType>; @@ -1001,16 +1052,15 @@ export type GqlTraineeResolvers, ParentType, ContextType>; type?: Resolver; username?: Resolver; - email?: Resolver; - deleteAt?: Resolver, ParentType, ContextType>; - openReportsCount?: Resolver; - alexaSkillLinked?: Resolver, ParentType, ContextType>; __isTypeOf?: IsTypeOfResolverFn; }>; export type GqlTrainerResolvers = ResolversObject<{ + alexaSkillLinked?: Resolver, ParentType, ContextType>; avatar?: Resolver; createdAt?: Resolver; + deleteAt?: Resolver, ParentType, ContextType>; + email?: Resolver; firstName?: Resolver; id?: Resolver; language?: Resolver, ParentType, ContextType>; @@ -1021,9 +1071,6 @@ export type GqlTrainerResolvers, ParentType, ContextType>; type?: Resolver; username?: Resolver; - email?: Resolver; - deleteAt?: Resolver, ParentType, ContextType>; - alexaSkillLinked?: Resolver, ParentType, ContextType>; __isTypeOf?: IsTypeOfResolverFn; }>; @@ -1034,15 +1081,17 @@ export type GqlTrainerTraineePayloadResolvers; export type GqlUpdateReportPayloadResolvers = ResolversObject<{ - trainee?: Resolver; report?: Resolver; + trainee?: Resolver; __isTypeOf?: IsTypeOfResolverFn; }>; export type GqlUserInterfaceResolvers = ResolversObject<{ - __resolveType: TypeResolveFn<'Admin' | 'Trainee' | 'Trainer', ParentType, ContextType>; + __resolveType: TypeResolveFn<'Admin' | 'Mentor' | 'Trainee' | 'Trainer', ParentType, ContextType>; + alexaSkillLinked?: Resolver, ParentType, ContextType>; avatar?: Resolver; createdAt?: Resolver; + email?: Resolver; firstName?: Resolver; id?: Resolver; language?: Resolver, ParentType, ContextType>; @@ -1052,8 +1101,6 @@ export type GqlUserInterfaceResolvers, ParentType, ContextType>; type?: Resolver; username?: Resolver; - email?: Resolver; - alexaSkillLinked?: Resolver, ParentType, ContextType>; }>; export type GqlResolvers = ResolversObject<{ @@ -1082,4 +1129,3 @@ export type GqlResolvers = ResolversObject<{ UserInterface?: GqlUserInterfaceResolvers; }>; - diff --git a/packages/api/src/models.ts b/packages/api/src/models.ts index 1ab7081..ff80cfd 100644 --- a/packages/api/src/models.ts +++ b/packages/api/src/models.ts @@ -4,6 +4,7 @@ import { GqlCommentableInterface, GqlDay, GqlEntry, + GqlMentor, GqlPaper, GqlReport, GqlTrainee, @@ -11,7 +12,7 @@ import { GqlUserInterface, } from './graphql' -export type User = Trainee | Trainer | Admin +export type User = Trainee | Trainer | Mentor | Admin /** * This values, that are omited from the gql types, @@ -41,6 +42,8 @@ export type Trainee = UserInterface & export type Trainer = UserInterface & Omit +export type Mentor = UserInterface & Omit + export type Admin = UserInterface & Omit export type Comment = Omit & { diff --git a/packages/backend/seeds/paper.json b/packages/backend/seeds/paper.json new file mode 100644 index 0000000..e69de29 diff --git a/packages/backend/seeds/users.json b/packages/backend/seeds/users.json index e5f9155..1a90c76 100644 --- a/packages/backend/seeds/users.json +++ b/packages/backend/seeds/users.json @@ -42,5 +42,20 @@ "theme": "light", "email": "admin@exampleCompany.com", "token": "789" + }, + { + "id": "1011", + "type": "Mentor", + "companyId": "expGermany", + "createdAt": "2021-04-08T12:43:48.736Z", + "firstName": "Men", + "language": "de", + "lastName": "Tor", + "notification": true, + "startDate": "2019-05-06T22:00:00.000Z", + "endDate": "2029-05-06T22:00:00.000Z", + "theme": "light", + "email": "mentor@exampleCompany.com", + "token": "1011" } ] diff --git a/packages/backend/src/permissions.ts b/packages/backend/src/permissions.ts index d13c4bb..340beba 100644 --- a/packages/backend/src/permissions.ts +++ b/packages/backend/src/permissions.ts @@ -57,6 +57,7 @@ export const permissions = shield( // Admin Queris getUser: and(authenticated, admin), trainers: and(authenticated, admin), + mentors: and(authenticated, admin), }, Mutation: { _devsetusertype: and(authenticated, debug), @@ -68,6 +69,9 @@ export const permissions = shield( unlinkAlexa: authenticated, createOAuthCode: authenticated, + /**createMentor: authenticated, + updateMentor: authenticated,**/ + // Trainee and Trainer mutations updateReport: and(authenticated, or(trainee, trainer)), createCommentOnEntry: and(authenticated, or(trainee, trainer)), diff --git a/packages/backend/src/repositories/mentor.repo.ts b/packages/backend/src/repositories/mentor.repo.ts new file mode 100644 index 0000000..200ca79 --- /dev/null +++ b/packages/backend/src/repositories/mentor.repo.ts @@ -0,0 +1,13 @@ +import {Mentor} from '@lara/api' + +import { queryObjects, userTableName, userTypeIndex } from '../db' +import { userById } from './user.repo' + +export const allMentors = async (): Promise => { + return queryObjects(userTableName, userTypeIndex, { type: 'Mentor' }) +} + +export const mentorById = async (id: string): Promise => { + const user = await userById(id) + return user?.type === 'Mentor' ? user : undefined +} diff --git a/packages/backend/src/resolvers/admin.resolver.ts b/packages/backend/src/resolvers/admin.resolver.ts index efbc26f..9638006 100644 --- a/packages/backend/src/resolvers/admin.resolver.ts +++ b/packages/backend/src/resolvers/admin.resolver.ts @@ -1,7 +1,14 @@ import { addMonths, isFuture, isToday, subWeeks } from 'date-fns' import { GraphQLError } from 'graphql' -import { AdminContext, GqlResolvers, Trainee, Trainer, User } from '@lara/api' +import { + AdminContext, + GqlResolvers, + Mentor, + Trainee, + Trainer, + User +} from '@lara/api' import { isAdmin, isTrainee, isTrainer } from '../permissions' import { traineeById } from '../repositories/trainee.repo' @@ -13,6 +20,8 @@ import { deleteTrainer, generateTrainer, validateTrainer } from '../services/tra import { avatar, username } from '../services/user.service' import { parseISODateString } from '../utils/date' import { t } from '../i18n' +import {generateMentor, validateMentor} from "../services/mentor.service"; +import {mentorById} from "../repositories/mentor.repo"; export const adminResolver: GqlResolvers = { Admin: { @@ -124,6 +133,40 @@ export const trainerAdminResolver: GqlResolvers = { }, }, } +export const mentorAdminResolver: GqlResolvers = { + Mutation: { + createMentor: async (_parent, { input }, { currentUser }) => { + const existingUser = await userByEmail(input.email) + + if (existingUser) { + throw new GraphQLError(t('errors.userAlreadyExists', currentUser.language)) + } + + const newMentor = await generateMentor(input) + + return saveUser(newMentor) + }, + updateMentor: async (_parent, { input, id }, { currentUser }) => { + const mentor = await mentorById(id) + + if (!mentor) { + throw new GraphQLError(t('errors.missingUser', currentUser.language)) + } + + const updatedMentor: Mentor = { + ...mentor, + ...input, + } + + await validateMentor(updatedMentor) + + // we need to save the user and not update it + // because we don't know what exactly changed + // if we use update DDB would throw an error + return saveUser(updatedMentor) + }, + }, +} export const traineeAdminResolver: GqlResolvers = { Mutation: { diff --git a/packages/backend/src/resolvers/index.ts b/packages/backend/src/resolvers/index.ts index 1a0dba3..4b1452e 100644 --- a/packages/backend/src/resolvers/index.ts +++ b/packages/backend/src/resolvers/index.ts @@ -1,5 +1,5 @@ import { alexaResolver } from './alexa.resolver' -import { adminResolver, traineeAdminResolver, trainerAdminResolver } from './admin.resolver' +import { adminResolver, traineeAdminResolver, trainerAdminResolver, mentorAdminResolver } from './admin.resolver' import { authResolver } from './auth.resolver' import { commentResolver } from './comment.resolver' import { configResolver } from './config.resolver' @@ -9,6 +9,7 @@ import { reportResolver, reportTraineeResolver } from './report.resolver' import { traineeResolver, traineeTraineeResolver } from './trainee.resolver' import { trainerResolver } from './trainer.resolver' import { userResolver } from './user.resolver' +import { mentorResolver } from "./mentor.resolver"; export const resolvers = [ configResolver, @@ -28,12 +29,15 @@ export const resolvers = [ trainerResolver, + mentorResolver, + userResolver, authResolver, adminResolver, traineeAdminResolver, trainerAdminResolver, + mentorAdminResolver, alexaResolver, ] diff --git a/packages/backend/src/resolvers/mentor.resolver.ts b/packages/backend/src/resolvers/mentor.resolver.ts new file mode 100644 index 0000000..c38cbb2 --- /dev/null +++ b/packages/backend/src/resolvers/mentor.resolver.ts @@ -0,0 +1,12 @@ +import {GqlResolvers, MentorContext} from '@lara/api' + +import { alexaSkillLinked } from '../services/alexa.service' +import { avatar, username } from '../services/user.service' + +export const mentorResolver: GqlResolvers = { + Mentor: { + avatar, + username, + alexaSkillLinked, + }, +} diff --git a/packages/backend/src/services/email.service.ts b/packages/backend/src/services/email.service.ts index 9283987..017c976 100644 --- a/packages/backend/src/services/email.service.ts +++ b/packages/backend/src/services/email.service.ts @@ -1,4 +1,13 @@ -import { Admin, EmailPayload, EmailTranslations, Report, Trainee, Trainer, User } from '@lara/api' +import { + Admin, + EmailPayload, + EmailTranslations, + Mentor, + Report, + Trainee, + Trainer, + User +} from '@lara/api' import { invokeLambda } from '../aws/lambda' import { t } from '../i18n' @@ -64,7 +73,7 @@ export const sendNotificationMail = async (report: Report, sender: User): Promis } // creates Payload for admin if a user will be deleted -export const adminDeletionMailPayload = (admin: Admin, user: Trainee | Trainer): EmailPayload => { +export const adminDeletionMailPayload = (admin: Admin, user: Trainee | Trainer | Mentor): EmailPayload => { const link = isTrainee(user) ? envLink(`/trainees/${user.id}`) : envLink(`/trainer/${user.id}`) return { emailType: 'deleteUser', @@ -93,7 +102,7 @@ export const trainerDeletionMailPayload = (trainer: Trainer, user: Trainee): Ema } // creates Payload for the user that will be deleted -export const userToDeleteDeletionMailPayload = (userToDelete: Trainee | Trainer): EmailPayload => { +export const userToDeleteDeletionMailPayload = (userToDelete: Trainee | Trainer | Mentor): EmailPayload => { return { emailType: 'deleteAccount', userData: { @@ -110,7 +119,7 @@ export const userToDeleteDeletionMailPayload = (userToDelete: Trainee | Trainer) * If UserToDelete is a Trainee the Trainer will be notified too. * @param userToDelete */ -export const sendDeletionMail = async (userToDelete: Trainee | Trainer): Promise => { +export const sendDeletionMail = async (userToDelete: Trainee | Mentor | Trainer): Promise => { const admins = await allAdmins() // notify admins diff --git a/packages/backend/src/services/mentor.service.ts b/packages/backend/src/services/mentor.service.ts new file mode 100644 index 0000000..a5532db --- /dev/null +++ b/packages/backend/src/services/mentor.service.ts @@ -0,0 +1,50 @@ +import { v4 } from 'uuid' + +import {Mentor} from '@lara/api' + +import { deleteUser } from '../repositories/user.repo' + +type GenerateMentorOptions = { + firstName: string + lastName: string + email: string +} + +/** + * Generates a new mentor object. + * The mentor isn't saved to the DB yet + * @param options Generate Options + * @returns New Mentor + */ +export const generateMentor = async (options: GenerateMentorOptions): Promise => { + const mentor: Mentor = { + id: v4(), + createdAt: new Date().toISOString(), + type: 'Mentor', + ...options, + } + + await validateMentor(mentor) + + return mentor +} + +/** + * Validates that the mentor attributes are all + * correct. Throws an error if not + * @param _mentor Mentor to validate + */ +export const validateMentor = async (_mentor: Mentor): Promise => { + // function for validations in the future +} + +/** + * Deletes a mentor and all it's references from the DB + * @param trainer Mentor to delete + * @returns Boolean indicating success + */ +export const deleteMentor = async (mentor: Mentor): Promise => { + const deleteMentorSuccess = await deleteUser(mentor) + + return deleteMentorSuccess +} diff --git a/packages/frontend/src/components/edit-user-row.tsx b/packages/frontend/src/components/edit-user-row.tsx index 459748b..e2aa5ae 100644 --- a/packages/frontend/src/components/edit-user-row.tsx +++ b/packages/frontend/src/components/edit-user-row.tsx @@ -12,7 +12,7 @@ type EditUser = Pick = ({ user, baseUrl }) => { diff --git a/packages/frontend/src/components/navigation.tsx b/packages/frontend/src/components/navigation.tsx index 234073c..ece5a23 100644 --- a/packages/frontend/src/components/navigation.tsx +++ b/packages/frontend/src/components/navigation.tsx @@ -84,6 +84,18 @@ const Navigation: React.FunctionComponent = () => { ) } + const renderMentorNav = () => { + return ( + <> + + {strings.navigation.paper} + + + {strings.navigation.settings} + + + ) + } const renderAdminNav = () => { return ( @@ -94,6 +106,9 @@ const Navigation: React.FunctionComponent = () => { {strings.navigation.trainer} + + {strings.navigation.mentor} + {strings.navigation.settings} @@ -124,6 +139,7 @@ const Navigation: React.FunctionComponent = () => { {data.currentUser?.type === UserTypeEnum.Trainer && renderTrainerNav()} {data.currentUser?.type === UserTypeEnum.Trainee && renderTraineeNav()} + {data.currentUser?.type === UserTypeEnum.Mentor && renderMentorNav()} {data.currentUser?.type === UserTypeEnum.Admin && renderAdminNav()} )} diff --git a/packages/frontend/src/components/status-bar.tsx b/packages/frontend/src/components/status-bar.tsx index 7bf2004..2e0e3bd 100644 --- a/packages/frontend/src/components/status-bar.tsx +++ b/packages/frontend/src/components/status-bar.tsx @@ -50,6 +50,7 @@ const StatusBar: React.FunctionComponent = ({ currentUser }) => diff --git a/packages/frontend/src/graphql/index.tsx b/packages/frontend/src/graphql/index.tsx index 2d89a2f..50ce377 100644 --- a/packages/frontend/src/graphql/index.tsx +++ b/packages/frontend/src/graphql/index.tsx @@ -1,10 +1,11 @@ import { gql } from '@apollo/client'; import * as Apollo from '@apollo/client'; export type Maybe = T | undefined; +export type InputMaybe = T | undefined; export type Exact = { [K in keyof T]: T[K] }; export type MakeOptional = Omit & { [SubKey in K]?: Maybe }; export type MakeMaybe = Omit & { [SubKey in K]: Maybe }; -const defaultOptions = {} +const defaultOptions = {} as const; /** All built-in and custom scalars, mapped to their actual values */ export type Scalars = { ID: string; @@ -16,25 +17,25 @@ export type Scalars = { export type Admin = UserInterface & { __typename?: 'Admin'; + alexaSkillLinked?: Maybe; avatar: Scalars['String']; createdAt: Scalars['String']; + email: Scalars['String']; firstName: Scalars['String']; id: Scalars['ID']; language?: Maybe; lastName: Scalars['String']; notification?: Maybe; + signature?: Maybe; theme?: Maybe; type: UserTypeEnum; username: Scalars['String']; - email: Scalars['String']; - signature?: Maybe; - alexaSkillLinked?: Maybe; }; export type AnswerPaperInput = { + answer: Scalars['String']; id: Scalars['ID']; questionId: Scalars['ID']; - answer: Scalars['String']; }; export type Comment = { @@ -64,14 +65,20 @@ export type CreateCommentPayload = { commentable: CommentableInterface; }; -export type CreateTraineeInput = { +export type CreateMentorInput = { + email: Scalars['String']; firstName: Scalars['String']; lastName: Scalars['String']; +}; + +export type CreateTraineeInput = { + companyId: Scalars['String']; email: Scalars['String']; - startDate: Scalars['String']; endDate: Scalars['String']; + firstName: Scalars['String']; + lastName: Scalars['String']; + startDate: Scalars['String']; startOfToolUsage: Scalars['String']; - companyId: Scalars['String']; }; export type CreateTrainerInput = { @@ -91,16 +98,16 @@ export type Day = CommentableInterface & { }; export enum DayStatusEnum { - /** workday */ - Work = 'work', - /** vacation */ - Vacation = 'vacation', - /** sick leave */ - Sick = 'sick', /** school/university */ Education = 'education', /** public holiday */ - Holiday = 'holiday' + Holiday = 'holiday', + /** sick leave */ + Sick = 'sick', + /** vacation */ + Vacation = 'vacation', + /** workday */ + Work = 'work' } /** Autogenerated return type of DevSetUser */ @@ -126,27 +133,38 @@ export type EntryInput = { export type LaraConfig = { __typename?: 'LaraConfig'; - minWorkDayMinutes: Scalars['Int']; - maxWorkDayMinutes: Scalars['Int']; expectedWorkDayMinutes: Scalars['Int']; - minEducationDayMinutes: Scalars['Int']; + finishedWeekDayCount: Scalars['Int']; maxEducationDayMinutes: Scalars['Int']; maxEntryMinutes: Scalars['Int']; maxPeriodYearsCount: Scalars['Int']; - finishedWeekDayCount: Scalars['Int']; + maxWorkDayMinutes: Scalars['Int']; + minEducationDayMinutes: Scalars['Int']; + minWorkDayMinutes: Scalars['Int']; }; -export type Mentor = { +export type Mentor = UserInterface & { __typename?: 'Mentor'; - name: Scalars['String']; + alexaSkillLinked?: Maybe; + avatar: Scalars['String']; + createdAt: Scalars['String']; + deleteAt?: Maybe; email: Scalars['String']; - signature: Scalars['String']; + firstName: Scalars['String']; + id: Scalars['ID']; + language?: Maybe; + lastName: Scalars['String']; + notification?: Maybe; + signature?: Maybe; + theme?: Maybe; + type: UserTypeEnum; + username: Scalars['String']; }; export type MentorInput = { - name?: Maybe; - email?: Maybe; - signature?: Maybe; + email?: InputMaybe; + name?: InputMaybe; + signature?: InputMaybe; }; export type MutateEntryPayload = { @@ -162,6 +180,8 @@ export type Mutation = { _devloginuser?: Maybe; /** [DEV] Sets the users type. */ _devsetusertype: DevSetUserPayload; + /** Update Paper */ + answerPaper: PaperFormData; /** Claims a Trainee by the current Trainer */ claimTrainee?: Maybe; /** Creates a new comment on a Day which is identified by the id argument. */ @@ -172,12 +192,32 @@ export type Mutation = { createCommentOnReport: CreateCommentPayload; /** Creates a new entry which is assigned to the matching report based on the day Id */ createEntry: MutateEntryPayload; + /** Creates Mentor. */ + createMentor?: Maybe; + /** Create OAuth Code */ + createOAuthCode: Scalars['String']; + /** Creates Trainee. */ + createTrainee?: Maybe; + /** Creates Trainer. */ + createTrainer?: Maybe; /** Deletes an entry by the given ID. Only considers entries made by the current user. Returns the ID of the deleted entry. */ deleteEntry: MutateEntryPayload; + /** Delete Paper */ + deletePaper: Scalars['Boolean']; + /** Link Alexa account */ + linkAlexa?: Maybe; /** Login via google. */ login?: Maybe; + /** Marks User to be deleted */ + markUserForDeletion?: Maybe; + /** Create Paper */ + postPaper: Paper; /** Unclaims a Trainee by the current Trainer */ unclaimTrainee?: Maybe; + /** Unlink Alexa account */ + unlinkAlexa?: Maybe; + /** Unmarks User from deletion */ + unmarkUserForDeletion?: Maybe; /** Updates the current trainee */ updateCurrentTrainee?: Maybe; /** Updates the current user */ @@ -186,32 +226,14 @@ export type Mutation = { updateDay?: Maybe; updateEntry: MutateEntryPayload; updateEntryOrder: MutateEntryPayload; + /** Updates Mentor. */ + updateMentor?: Maybe; /** Updates report which is identified by the id argument. */ updateReport?: Maybe; - /** Creates Trainee. */ - createTrainee?: Maybe; - /** Creates Trainer. */ - createTrainer?: Maybe; - /** Marks User to be deleted */ - markUserForDeletion?: Maybe; - /** Unmarks User from deletion */ - unmarkUserForDeletion?: Maybe; /** Updates Trainee. */ updateTrainee?: Maybe; /** Updates Trainer. */ updateTrainer?: Maybe; - /** Link Alexa account */ - linkAlexa?: Maybe; - /** Unlink Alexa account */ - unlinkAlexa?: Maybe; - /** Create OAuth Code */ - createOAuthCode: Scalars['String']; - /** Create Paper */ - postPaper: Paper; - /** Delete Paper */ - deletePaper: Scalars['Boolean']; - /** Update Paper */ - answerPaper: PaperFormData; }; @@ -225,28 +247,33 @@ export type Mutation_DevsetusertypeArgs = { }; +export type MutationAnswerPaperArgs = { + input: AnswerPaperInput; +}; + + export type MutationClaimTraineeArgs = { id: Scalars['ID']; }; export type MutationCreateCommentOnDayArgs = { - text: Scalars['String']; id: Scalars['ID']; + text: Scalars['String']; traineeId: Scalars['ID']; }; export type MutationCreateCommentOnEntryArgs = { - text: Scalars['String']; id: Scalars['ID']; + text: Scalars['String']; traineeId: Scalars['ID']; }; export type MutationCreateCommentOnReportArgs = { - text: Scalars['String']; id: Scalars['ID']; + text: Scalars['String']; traineeId: Scalars['ID']; }; @@ -257,158 +284,164 @@ export type MutationCreateEntryArgs = { }; -export type MutationDeleteEntryArgs = { - id: Scalars['ID']; +export type MutationCreateMentorArgs = { + input: CreateMentorInput; }; -export type MutationLoginArgs = { - googleToken: Scalars['String']; +export type MutationCreateTraineeArgs = { + input: CreateTraineeInput; }; -export type MutationUnclaimTraineeArgs = { +export type MutationCreateTrainerArgs = { + input: CreateTrainerInput; +}; + + +export type MutationDeleteEntryArgs = { id: Scalars['ID']; }; -export type MutationUpdateCurrentTraineeArgs = { - input: UpdateCurrentTraineeInput; +export type MutationDeletePaperArgs = { + id: Scalars['ID']; }; -export type MutationUpdateCurrentUserArgs = { - input?: Maybe; +export type MutationLinkAlexaArgs = { + code: Scalars['String']; + state: Scalars['String']; }; -export type MutationUpdateDayArgs = { - status?: Maybe; - id: Scalars['ID']; +export type MutationLoginArgs = { + googleToken: Scalars['String']; }; -export type MutationUpdateEntryArgs = { +export type MutationMarkUserForDeletionArgs = { id: Scalars['ID']; - input: EntryInput; }; -export type MutationUpdateEntryOrderArgs = { - entryId: Scalars['ID']; - dayId: Scalars['ID']; - orderId: Scalars['Int']; +export type MutationPostPaperArgs = { + id?: InputMaybe; + input: PaperInput; }; -export type MutationUpdateReportArgs = { - summary?: Maybe; - department?: Maybe; - status?: Maybe; +export type MutationUnclaimTraineeArgs = { id: Scalars['ID']; }; -export type MutationCreateTraineeArgs = { - input: CreateTraineeInput; +export type MutationUnmarkUserForDeletionArgs = { + id: Scalars['ID']; }; -export type MutationCreateTrainerArgs = { - input: CreateTrainerInput; +export type MutationUpdateCurrentTraineeArgs = { + input: UpdateCurrentTraineeInput; }; -export type MutationMarkUserForDeletionArgs = { - id: Scalars['ID']; +export type MutationUpdateCurrentUserArgs = { + input?: InputMaybe; }; -export type MutationUnmarkUserForDeletionArgs = { +export type MutationUpdateDayArgs = { id: Scalars['ID']; + status?: InputMaybe; }; -export type MutationUpdateTraineeArgs = { - input: UpdateTraineeInput; +export type MutationUpdateEntryArgs = { id: Scalars['ID']; + input: EntryInput; }; -export type MutationUpdateTrainerArgs = { - input: UpdateTrainerInput; - id: Scalars['ID']; +export type MutationUpdateEntryOrderArgs = { + dayId: Scalars['ID']; + entryId: Scalars['ID']; + orderId: Scalars['Int']; }; -export type MutationLinkAlexaArgs = { - code: Scalars['String']; - state: Scalars['String']; +export type MutationUpdateMentorArgs = { + id: Scalars['ID']; + input: UpdateMentorInput; }; -export type MutationPostPaperArgs = { - input: PaperInput; - id?: Maybe; +export type MutationUpdateReportArgs = { + department?: InputMaybe; + id: Scalars['ID']; + status?: InputMaybe; + summary?: InputMaybe; }; -export type MutationDeletePaperArgs = { +export type MutationUpdateTraineeArgs = { id: Scalars['ID']; + input: UpdateTraineeInput; }; -export type MutationAnswerPaperArgs = { - input: AnswerPaperInput; +export type MutationUpdateTrainerArgs = { + id: Scalars['ID']; + input: UpdateTrainerInput; }; export type OAuthPayload = { __typename?: 'OAuthPayload'; accessToken: Scalars['String']; - refreshToken?: Maybe; expiresIn: Scalars['Int']; + refreshToken?: Maybe; }; export type Paper = { __typename?: 'Paper'; - id: Scalars['ID']; - trainee: Trainee; - status: PaperStatus; - traineeForm: Array; - trainerForm: Array; - conclusion?: Maybe; archivedAt?: Maybe; - createdAt: Scalars['String']; client: Scalars['String']; + conclusion?: Maybe; + createdAt: Scalars['String']; + id: Scalars['ID']; mentor: Mentor; - periodStart: Scalars['String']; periodEnd: Scalars['String']; + periodStart: Scalars['String']; + status: PaperStatus; subject: Scalars['String']; + trainee: Trainee; + traineeForm: Array; + trainerForm: Array; }; export type PaperFormData = { __typename?: 'PaperFormData'; - id: Scalars['ID']; - question: Scalars['String']; answer?: Maybe; hint?: Maybe; + id: Scalars['ID']; + question: Scalars['String']; }; export type PaperInput = { - client?: Maybe; - mentor?: Maybe; - periodStart?: Maybe; - periodEnd?: Maybe; - subject?: Maybe; - status?: Maybe; + client?: InputMaybe; + mentor?: InputMaybe; + periodEnd?: InputMaybe; + periodStart?: InputMaybe; + status?: InputMaybe; + subject?: InputMaybe; }; export enum PaperStatus { + Archived = 'Archived', InProgress = 'InProgress', - TraineeDone = 'TraineeDone', - MentorDone = 'MentorDone', InReview = 'InReview', - Archived = 'Archived' + MentorDone = 'MentorDone', + TraineeDone = 'TraineeDone' } export type PrintPayload = { @@ -418,10 +451,22 @@ export type PrintPayload = { export type Query = { __typename?: 'Query'; - config: LaraConfig; + /** Get the alexa account linking url */ + alexaLinkingUrl?: Maybe; + /** Will look for Users to delete */ + cleanup: Scalars['Boolean']; companies?: Maybe>; + config: LaraConfig; /** Returns the logged in user. This user can be either a Trainee or a Trainer. */ currentUser?: Maybe; + /** Get the PAPER */ + getPaper?: Maybe; + /** Get a User by ID */ + getUser?: Maybe; + /** Get all Trainers */ + mentors: Array; + /** Print single report or report batch */ + print: PrintPayload; /** Finds the report for a specifig trainee on the requested year and week. */ reportForTrainee?: Maybe; /** Finds the report for the requested year and week. */ @@ -434,34 +479,17 @@ export type Query = { trainees: Array; /** Get all Trainers */ trainers: Array; - /** Print single report or report batch */ - print: PrintPayload; - /** Get a User by ID */ - getUser?: Maybe; - /** Will look for Users to delete */ - cleanup: Scalars['Boolean']; - /** Get the alexa account linking url */ - alexaLinkingUrl?: Maybe; - /** Get the PAPER */ - getPaper?: Maybe; }; -export type QueryReportForTraineeArgs = { - year: Scalars['Int']; - week: Scalars['Int']; +export type QueryGetPaperArgs = { id: Scalars['ID']; + token?: InputMaybe; }; -export type QueryReportForYearAndWeekArgs = { - year: Scalars['Int']; - week: Scalars['Int']; -}; - - -export type QueryReportsArgs = { - statuses?: Maybe>; +export type QueryGetUserArgs = { + id: Scalars['ID']; }; @@ -470,14 +498,21 @@ export type QueryPrintArgs = { }; -export type QueryGetUserArgs = { +export type QueryReportForTraineeArgs = { id: Scalars['ID']; + week: Scalars['Int']; + year: Scalars['Int']; }; -export type QueryGetPaperArgs = { - id: Scalars['ID']; - token?: Maybe; +export type QueryReportForYearAndWeekArgs = { + week: Scalars['Int']; + year: Scalars['Int']; +}; + + +export type QueryReportsArgs = { + statuses?: InputMaybe>; }; export type Report = CommentableInterface & { @@ -487,34 +522,37 @@ export type Report = CommentableInterface & { days: Array; department?: Maybe; id: Scalars['ID']; + nextReportLink?: Maybe; + previousReportLink?: Maybe; + reportAccepted?: Maybe; status: ReportStatus; summary?: Maybe; week: Scalars['Int']; year: Scalars['Int']; - reportAccepted?: Maybe; - previousReportLink?: Maybe; - nextReportLink?: Maybe; }; /** Represents the current state of the report */ export enum ReportStatus { - /** Report is open */ - Todo = 'todo', - /** Passes the report to the trainer */ - Review = 'review', + /** Done reports are marked as archived */ + Archived = 'archived', /** Used if there is any problem with a report */ Reopened = 'reopened', - /** Done reports are marked as archived */ - Archived = 'archived' + /** Passes the report to the trainer */ + Review = 'review', + /** Report is open */ + Todo = 'todo' } export type Trainee = UserInterface & { __typename?: 'Trainee'; + alexaSkillLinked?: Maybe; /** The url for the users avatar image. */ avatar: Scalars['String']; company: Company; course?: Maybe; createdAt: Scalars['String']; + deleteAt?: Maybe; + email: Scalars['String']; endDate?: Maybe; endOfToolUsage?: Maybe; firstName: Scalars['String']; @@ -522,6 +560,7 @@ export type Trainee = UserInterface & { language?: Maybe; lastName: Scalars['String']; notification?: Maybe; + openReportsCount: Scalars['Int']; reports: Array; signature?: Maybe; startDate?: Maybe; @@ -530,16 +569,15 @@ export type Trainee = UserInterface & { trainer?: Maybe; type: UserTypeEnum; username: Scalars['String']; - email: Scalars['String']; - deleteAt?: Maybe; - openReportsCount: Scalars['Int']; - alexaSkillLinked?: Maybe; }; export type Trainer = UserInterface & { __typename?: 'Trainer'; + alexaSkillLinked?: Maybe; avatar: Scalars['String']; createdAt: Scalars['String']; + deleteAt?: Maybe; + email: Scalars['String']; firstName: Scalars['String']; id: Scalars['ID']; language?: Maybe; @@ -550,9 +588,6 @@ export type Trainer = UserInterface & { trainees: Array; type: UserTypeEnum; username: Scalars['String']; - email: Scalars['String']; - deleteAt?: Maybe; - alexaSkillLinked?: Maybe; }; export type TrainerTraineePayload = { @@ -562,41 +597,49 @@ export type TrainerTraineePayload = { }; export type UpdateCurrentTraineeInput = { - course?: Maybe; + course?: InputMaybe; +}; + +export type UpdateMentorInput = { + email?: InputMaybe; + firstName?: InputMaybe; + lastName?: InputMaybe; }; export type UpdateReportPayload = { __typename?: 'UpdateReportPayload'; - trainee: Trainee; report: Report; + trainee: Trainee; }; export type UpdateTraineeInput = { - firstName?: Maybe; - lastName?: Maybe; - email?: Maybe; - startDate?: Maybe; - endDate?: Maybe; - startOfToolUsage?: Maybe; - companyId?: Maybe; + companyId?: InputMaybe; + email?: InputMaybe; + endDate?: InputMaybe; + firstName?: InputMaybe; + lastName?: InputMaybe; + startDate?: InputMaybe; + startOfToolUsage?: InputMaybe; }; export type UpdateTrainerInput = { - email?: Maybe; - firstName?: Maybe; - lastName?: Maybe; + email?: InputMaybe; + firstName?: InputMaybe; + lastName?: InputMaybe; }; export type UserInput = { - language?: Maybe; - theme?: Maybe; - signature?: Maybe; - notification?: Maybe; + language?: InputMaybe; + notification?: InputMaybe; + signature?: InputMaybe; + theme?: InputMaybe; }; export type UserInterface = { + alexaSkillLinked?: Maybe; avatar: Scalars['String']; createdAt: Scalars['String']; + email: Scalars['String']; firstName: Scalars['String']; id: Scalars['ID']; language?: Maybe; @@ -606,66 +649,34 @@ export type UserInterface = { theme?: Maybe; type: UserTypeEnum; username: Scalars['String']; - email: Scalars['String']; - alexaSkillLinked?: Maybe; }; export enum UserTypeEnum { + /** User is an Admin */ + Admin = 'Admin', + /** User is a Mentor */ + Mentor = 'Mentor', /** User is a Trainee */ Trainee = 'Trainee', /** User is a Trainer */ - Trainer = 'Trainer', - /** User is an Admin */ - Admin = 'Admin' + Trainer = 'Trainer' } export type ApplicationSettingsUpdateUserMutationVariables = Exact<{ - language?: Maybe; - theme?: Maybe; - notification?: Maybe; + language?: InputMaybe; + theme?: InputMaybe; + notification?: InputMaybe; }>; -export type ApplicationSettingsUpdateUserMutation = ( - { __typename?: 'Mutation' } - & { updateCurrentUser?: Maybe<( - { __typename: 'Admin' } - & Pick - ) | ( - { __typename: 'Trainee' } - & Pick - ) | ( - { __typename: 'Trainer' } - & Pick - )> } -); +export type ApplicationSettingsUpdateUserMutation = { __typename?: 'Mutation', updateCurrentUser?: { __typename: 'Admin', language?: string | undefined, theme?: string | undefined, notification?: boolean | undefined, id: string } | { __typename: 'Mentor', language?: string | undefined, theme?: string | undefined, notification?: boolean | undefined, id: string } | { __typename: 'Trainee', language?: string | undefined, theme?: string | undefined, notification?: boolean | undefined, id: string } | { __typename: 'Trainer', language?: string | undefined, theme?: string | undefined, notification?: boolean | undefined, id: string } | undefined }; export type ClaimTraineeMutationVariables = Exact<{ id: Scalars['ID']; }>; -export type ClaimTraineeMutation = ( - { __typename?: 'Mutation' } - & { claimTrainee?: Maybe<( - { __typename?: 'TrainerTraineePayload' } - & { trainee: ( - { __typename?: 'Trainee' } - & Pick - & { trainer?: Maybe<( - { __typename?: 'Trainer' } - & Pick - )> } - ), trainer: ( - { __typename?: 'Trainer' } - & Pick - & { trainees: Array<( - { __typename?: 'Trainee' } - & Pick - )> } - ) } - )> } -); +export type ClaimTraineeMutation = { __typename?: 'Mutation', claimTrainee?: { __typename?: 'TrainerTraineePayload', trainee: { __typename?: 'Trainee', id: string, trainer?: { __typename?: 'Trainer', id: string } | undefined }, trainer: { __typename?: 'Trainer', id: string, trainees: Array<{ __typename?: 'Trainee', id: string }> } } | undefined }; export type CreateCommentOnDayMutationVariables = Exact<{ id: Scalars['ID']; @@ -674,30 +685,7 @@ export type CreateCommentOnDayMutationVariables = Exact<{ }>; -export type CreateCommentOnDayMutation = ( - { __typename?: 'Mutation' } - & { createCommentOnDay: ( - { __typename?: 'CreateCommentPayload' } - & { commentable: ( - { __typename?: 'Day' } - & Pick - & { comments: Array<( - { __typename?: 'Comment' } - & Pick - & { user: ( - { __typename?: 'Admin' } - & Pick - ) | ( - { __typename?: 'Trainee' } - & Pick - ) | ( - { __typename?: 'Trainer' } - & Pick - ) } - )> } - ) | { __typename?: 'Entry' } | { __typename?: 'Report' } } - ) } -); +export type CreateCommentOnDayMutation = { __typename?: 'Mutation', createCommentOnDay: { __typename?: 'CreateCommentPayload', commentable: { __typename?: 'Day', id: string, comments: Array<{ __typename?: 'Comment', id: string, text?: string | undefined, user: { __typename?: 'Admin', id: string, firstName: string, lastName: string, avatar: string } | { __typename?: 'Mentor', id: string, firstName: string, lastName: string, avatar: string } | { __typename?: 'Trainee', id: string, firstName: string, lastName: string, avatar: string } | { __typename?: 'Trainer', id: string, firstName: string, lastName: string, avatar: string } }> } | { __typename?: 'Entry' } | { __typename?: 'Report' } } }; export type CreateCommentOnEntryMutationVariables = Exact<{ id: Scalars['ID']; @@ -706,30 +694,7 @@ export type CreateCommentOnEntryMutationVariables = Exact<{ }>; -export type CreateCommentOnEntryMutation = ( - { __typename?: 'Mutation' } - & { createCommentOnEntry: ( - { __typename?: 'CreateCommentPayload' } - & { commentable: { __typename?: 'Day' } | ( - { __typename?: 'Entry' } - & Pick - & { comments: Array<( - { __typename?: 'Comment' } - & Pick - & { user: ( - { __typename?: 'Admin' } - & Pick - ) | ( - { __typename?: 'Trainee' } - & Pick - ) | ( - { __typename?: 'Trainer' } - & Pick - ) } - )> } - ) | { __typename?: 'Report' } } - ) } -); +export type CreateCommentOnEntryMutation = { __typename?: 'Mutation', createCommentOnEntry: { __typename?: 'CreateCommentPayload', commentable: { __typename?: 'Day' } | { __typename?: 'Entry', id: string, comments: Array<{ __typename?: 'Comment', id: string, text?: string | undefined, user: { __typename?: 'Admin', id: string, firstName: string, lastName: string, avatar: string } | { __typename?: 'Mentor', id: string, firstName: string, lastName: string, avatar: string } | { __typename?: 'Trainee', id: string, firstName: string, lastName: string, avatar: string } | { __typename?: 'Trainer', id: string, firstName: string, lastName: string, avatar: string } }> } | { __typename?: 'Report' } } }; export type CreateCommentOnReportMutationVariables = Exact<{ id: Scalars['ID']; @@ -738,30 +703,7 @@ export type CreateCommentOnReportMutationVariables = Exact<{ }>; -export type CreateCommentOnReportMutation = ( - { __typename?: 'Mutation' } - & { createCommentOnReport: ( - { __typename?: 'CreateCommentPayload' } - & { commentable: { __typename?: 'Day' } | { __typename?: 'Entry' } | ( - { __typename?: 'Report' } - & Pick - & { comments: Array<( - { __typename?: 'Comment' } - & Pick - & { user: ( - { __typename?: 'Admin' } - & Pick - ) | ( - { __typename?: 'Trainee' } - & Pick - ) | ( - { __typename?: 'Trainer' } - & Pick - ) } - )> } - ) } - ) } -); +export type CreateCommentOnReportMutation = { __typename?: 'Mutation', createCommentOnReport: { __typename?: 'CreateCommentPayload', commentable: { __typename?: 'Day' } | { __typename?: 'Entry' } | { __typename?: 'Report', id: string, comments: Array<{ __typename?: 'Comment', id: string, text?: string | undefined, user: { __typename?: 'Admin', id: string, firstName: string, lastName: string, avatar: string } | { __typename?: 'Mentor', id: string, firstName: string, lastName: string, avatar: string } | { __typename?: 'Trainee', id: string, firstName: string, lastName: string, avatar: string } | { __typename?: 'Trainer', id: string, firstName: string, lastName: string, avatar: string } }> } } }; export type CreateEntryMutationVariables = Exact<{ dayId: Scalars['String']; @@ -769,131 +711,62 @@ export type CreateEntryMutationVariables = Exact<{ }>; -export type CreateEntryMutation = ( - { __typename?: 'Mutation' } - & { createEntry: ( - { __typename?: 'MutateEntryPayload' } - & { day: ( - { __typename: 'Day' } - & Pick - & { entries: Array<( - { __typename?: 'Entry' } - & Pick - & { comments: Array<( - { __typename?: 'Comment' } - & Pick - )> } - )> } - ) } - ) } -); +export type CreateEntryMutation = { __typename?: 'Mutation', createEntry: { __typename?: 'MutateEntryPayload', day: { __typename: 'Day', id: string, entries: Array<{ __typename?: 'Entry', id: string, text: string, time: number, orderId: number, comments: Array<{ __typename?: 'Comment', id: string }> }> } } }; + +export type CreateMentorMutationVariables = Exact<{ + input: CreateMentorInput; +}>; + + +export type CreateMentorMutation = { __typename?: 'Mutation', createMentor?: { __typename?: 'Mentor', id: string, avatar: string, firstName: string, lastName: string, email: string, type: UserTypeEnum } | undefined }; export type CreateOAuthCodeMutationVariables = Exact<{ [key: string]: never; }>; -export type CreateOAuthCodeMutation = ( - { __typename?: 'Mutation' } - & Pick -); +export type CreateOAuthCodeMutation = { __typename?: 'Mutation', createOAuthCode: string }; export type CreateTraineeMutationVariables = Exact<{ input: CreateTraineeInput; }>; -export type CreateTraineeMutation = ( - { __typename?: 'Mutation' } - & { createTrainee?: Maybe<( - { __typename?: 'Trainee' } - & Pick - & { company: ( - { __typename?: 'Company' } - & Pick - ) } - )> } -); +export type CreateTraineeMutation = { __typename?: 'Mutation', createTrainee?: { __typename?: 'Trainee', id: string, startDate?: string | undefined, startOfToolUsage?: string | undefined, endDate?: string | undefined, course?: string | undefined, avatar: string, firstName: string, lastName: string, email: string, type: UserTypeEnum, deleteAt?: string | undefined, company: { __typename?: 'Company', id: string } } | undefined }; export type CreateTrainerMutationVariables = Exact<{ input: CreateTrainerInput; }>; -export type CreateTrainerMutation = ( - { __typename?: 'Mutation' } - & { createTrainer?: Maybe<( - { __typename?: 'Trainer' } - & Pick - )> } -); +export type CreateTrainerMutation = { __typename?: 'Mutation', createTrainer?: { __typename?: 'Trainer', id: string, avatar: string, firstName: string, lastName: string, email: string, type: UserTypeEnum } | undefined }; export type DayStatusSelectUpdateDayMutationVariables = Exact<{ id: Scalars['ID']; - status?: Maybe; + status?: InputMaybe; }>; -export type DayStatusSelectUpdateDayMutation = ( - { __typename?: 'Mutation' } - & { updateDay?: Maybe<( - { __typename: 'Day' } - & Pick - )> } -); +export type DayStatusSelectUpdateDayMutation = { __typename?: 'Mutation', updateDay?: { __typename: 'Day', id: string, status?: DayStatusEnum | undefined } | undefined }; export type DebugLoginMutationVariables = Exact<{ id: Scalars['String']; }>; -export type DebugLoginMutation = ( - { __typename?: 'Mutation' } - & { _devloginuser?: Maybe<( - { __typename?: 'OAuthPayload' } - & Pick - )> } -); +export type DebugLoginMutation = { __typename?: 'Mutation', _devloginuser?: { __typename?: 'OAuthPayload', accessToken: string, refreshToken?: string | undefined, expiresIn: number } | undefined }; export type DebugSetUsertypeMutationVariables = Exact<{ usertype: Scalars['String']; }>; -export type DebugSetUsertypeMutation = ( - { __typename?: 'Mutation' } - & { _devsetusertype: ( - { __typename?: 'DevSetUserPayload' } - & { user?: Maybe<( - { __typename: 'Admin' } - & Pick - ) | ( - { __typename: 'Trainee' } - & Pick - ) | ( - { __typename: 'Trainer' } - & Pick - )> } - ) } -); +export type DebugSetUsertypeMutation = { __typename?: 'Mutation', _devsetusertype: { __typename?: 'DevSetUserPayload', user?: { __typename: 'Admin', id: string } | { __typename: 'Mentor', id: string } | { __typename: 'Trainee', id: string } | { __typename: 'Trainer', id: string } | undefined } }; export type DeleteEntryMutationVariables = Exact<{ id: Scalars['ID']; }>; -export type DeleteEntryMutation = ( - { __typename?: 'Mutation' } - & { deleteEntry: ( - { __typename?: 'MutateEntryPayload' } - & { day: ( - { __typename: 'Day' } - & Pick - & { entries: Array<( - { __typename?: 'Entry' } - & Pick - )> } - ) } - ) } -); +export type DeleteEntryMutation = { __typename?: 'Mutation', deleteEntry: { __typename?: 'MutateEntryPayload', day: { __typename: 'Day', id: string, entries: Array<{ __typename?: 'Entry', id: string }> } } }; export type LinkAlexaMutationVariables = Exact<{ code: Scalars['String']; @@ -901,146 +774,54 @@ export type LinkAlexaMutationVariables = Exact<{ }>; -export type LinkAlexaMutation = ( - { __typename?: 'Mutation' } - & { linkAlexa?: Maybe<( - { __typename?: 'Admin' } - & Pick - ) | ( - { __typename?: 'Trainee' } - & Pick - ) | ( - { __typename?: 'Trainer' } - & Pick - )> } -); +export type LinkAlexaMutation = { __typename?: 'Mutation', linkAlexa?: { __typename?: 'Admin', id: string, alexaSkillLinked?: boolean | undefined } | { __typename?: 'Mentor', id: string, alexaSkillLinked?: boolean | undefined } | { __typename?: 'Trainee', id: string, alexaSkillLinked?: boolean | undefined } | { __typename?: 'Trainer', id: string, alexaSkillLinked?: boolean | undefined } | undefined }; export type LoginPageLoginMutationVariables = Exact<{ token: Scalars['String']; }>; -export type LoginPageLoginMutation = ( - { __typename?: 'Mutation' } - & { login?: Maybe<( - { __typename?: 'OAuthPayload' } - & Pick - )> } -); +export type LoginPageLoginMutation = { __typename?: 'Mutation', login?: { __typename?: 'OAuthPayload', accessToken: string, refreshToken?: string | undefined, expiresIn: number } | undefined }; export type MarkUserForDeleteMutationVariables = Exact<{ id: Scalars['ID']; }>; -export type MarkUserForDeleteMutation = ( - { __typename?: 'Mutation' } - & { markUserForDeletion?: Maybe<( - { __typename?: 'Admin' } - & Pick - ) | ( - { __typename?: 'Trainee' } - & Pick - ) | ( - { __typename?: 'Trainer' } - & Pick - )> } -); +export type MarkUserForDeleteMutation = { __typename?: 'Mutation', markUserForDeletion?: { __typename?: 'Admin', id: string } | { __typename?: 'Mentor', id: string } | { __typename?: 'Trainee', deleteAt?: string | undefined, id: string } | { __typename?: 'Trainer', deleteAt?: string | undefined, id: string } | undefined }; export type SignatureSettingsUpdateSignatureMutationVariables = Exact<{ - signature?: Maybe; + signature?: InputMaybe; }>; -export type SignatureSettingsUpdateSignatureMutation = ( - { __typename?: 'Mutation' } - & { updateCurrentUser?: Maybe<( - { __typename?: 'Admin' } - & Pick - ) | ( - { __typename?: 'Trainee' } - & Pick - ) | ( - { __typename?: 'Trainer' } - & Pick - )> } -); +export type SignatureSettingsUpdateSignatureMutation = { __typename?: 'Mutation', updateCurrentUser?: { __typename?: 'Admin', id: string, signature?: string | undefined } | { __typename?: 'Mentor', id: string, signature?: string | undefined } | { __typename?: 'Trainee', id: string, signature?: string | undefined } | { __typename?: 'Trainer', id: string, signature?: string | undefined } | undefined }; export type TraineeSettingsUpdateTraineeMutationVariables = Exact<{ - course?: Maybe; + course?: InputMaybe; }>; -export type TraineeSettingsUpdateTraineeMutation = ( - { __typename?: 'Mutation' } - & { updateCurrentTrainee?: Maybe<( - { __typename?: 'Trainee' } - & Pick - )> } -); +export type TraineeSettingsUpdateTraineeMutation = { __typename?: 'Mutation', updateCurrentTrainee?: { __typename?: 'Trainee', id: string, course?: string | undefined } | undefined }; export type UnclaimTraineeMutationVariables = Exact<{ id: Scalars['ID']; }>; -export type UnclaimTraineeMutation = ( - { __typename?: 'Mutation' } - & { unclaimTrainee?: Maybe<( - { __typename?: 'TrainerTraineePayload' } - & { trainee: ( - { __typename?: 'Trainee' } - & Pick - & { trainer?: Maybe<( - { __typename?: 'Trainer' } - & Pick - )> } - ), trainer: ( - { __typename?: 'Trainer' } - & Pick - & { trainees: Array<( - { __typename?: 'Trainee' } - & Pick - )> } - ) } - )> } -); +export type UnclaimTraineeMutation = { __typename?: 'Mutation', unclaimTrainee?: { __typename?: 'TrainerTraineePayload', trainee: { __typename?: 'Trainee', id: string, trainer?: { __typename?: 'Trainer', id: string } | undefined }, trainer: { __typename?: 'Trainer', id: string, trainees: Array<{ __typename?: 'Trainee', id: string }> } } | undefined }; export type UnlinkAlexaMutationVariables = Exact<{ [key: string]: never; }>; -export type UnlinkAlexaMutation = ( - { __typename?: 'Mutation' } - & { unlinkAlexa?: Maybe<( - { __typename?: 'Admin' } - & Pick - ) | ( - { __typename?: 'Trainee' } - & Pick - ) | ( - { __typename?: 'Trainer' } - & Pick - )> } -); +export type UnlinkAlexaMutation = { __typename?: 'Mutation', unlinkAlexa?: { __typename?: 'Admin', id: string, alexaSkillLinked?: boolean | undefined } | { __typename?: 'Mentor', id: string, alexaSkillLinked?: boolean | undefined } | { __typename?: 'Trainee', id: string, alexaSkillLinked?: boolean | undefined } | { __typename?: 'Trainer', id: string, alexaSkillLinked?: boolean | undefined } | undefined }; export type UnmarkUserForDeleteMutationVariables = Exact<{ id: Scalars['ID']; }>; -export type UnmarkUserForDeleteMutation = ( - { __typename?: 'Mutation' } - & { unmarkUserForDeletion?: Maybe<( - { __typename?: 'Admin' } - & Pick - ) | ( - { __typename?: 'Trainee' } - & Pick - ) | ( - { __typename?: 'Trainer' } - & Pick - )> } -); +export type UnmarkUserForDeleteMutation = { __typename?: 'Mutation', unmarkUserForDeletion?: { __typename?: 'Admin', id: string } | { __typename?: 'Mentor', id: string } | { __typename?: 'Trainee', deleteAt?: string | undefined, id: string } | { __typename?: 'Trainer', deleteAt?: string | undefined, id: string } | undefined }; export type UpdateEntryOrderMutationVariables = Exact<{ entryId: Scalars['ID']; @@ -1049,34 +830,7 @@ export type UpdateEntryOrderMutationVariables = Exact<{ }>; -export type UpdateEntryOrderMutation = ( - { __typename?: 'Mutation' } - & { updateEntryOrder: ( - { __typename?: 'MutateEntryPayload' } - & { entry?: Maybe<( - { __typename?: 'Entry' } - & Pick - )>, day: ( - { __typename?: 'Day' } - & Pick - & { entries: Array<( - { __typename?: 'Entry' } - & Pick - )> } - ), report: ( - { __typename?: 'Report' } - & Pick - & { days: Array<( - { __typename?: 'Day' } - & Pick - & { entries: Array<( - { __typename?: 'Entry' } - & Pick - )> } - )> } - ) } - ) } -); +export type UpdateEntryOrderMutation = { __typename?: 'Mutation', updateEntryOrder: { __typename?: 'MutateEntryPayload', entry?: { __typename?: 'Entry', id: string, orderId: number } | undefined, day: { __typename?: 'Day', id: string, entries: Array<{ __typename?: 'Entry', id: string, orderId: number }> }, report: { __typename?: 'Report', id: string, days: Array<{ __typename?: 'Day', id: string, entries: Array<{ __typename?: 'Entry', id: string, orderId: number }> }> } } }; export type UpdateEntryMutationVariables = Exact<{ id: Scalars['ID']; @@ -1084,57 +838,35 @@ export type UpdateEntryMutationVariables = Exact<{ }>; -export type UpdateEntryMutation = ( - { __typename?: 'Mutation' } - & { updateEntry: ( - { __typename?: 'MutateEntryPayload' } - & { entry?: Maybe<( - { __typename?: 'Entry' } - & Pick - )> } - ) } -); +export type UpdateEntryMutation = { __typename?: 'Mutation', updateEntry: { __typename?: 'MutateEntryPayload', entry?: { __typename?: 'Entry', id: string, time: number, text: string } | undefined } }; + +export type UpdateMentorMutationVariables = Exact<{ + input: UpdateMentorInput; + id: Scalars['ID']; +}>; + + +export type UpdateMentorMutation = { __typename?: 'Mutation', updateMentor?: { __typename?: 'Mentor', id: string, firstName: string, lastName: string, email: string, avatar: string, type: UserTypeEnum } | undefined }; export type UpdateReportReportReviewPageMutationVariables = Exact<{ id: Scalars['ID']; - summary?: Maybe; - department?: Maybe; - status?: Maybe; + summary?: InputMaybe; + department?: InputMaybe; + status?: InputMaybe; }>; -export type UpdateReportReportReviewPageMutation = ( - { __typename?: 'Mutation' } - & { updateReport?: Maybe<( - { __typename?: 'UpdateReportPayload' } - & { report: ( - { __typename?: 'Report' } - & Pick - ), trainee: ( - { __typename?: 'Trainee' } - & Pick - ) } - )> } -); +export type UpdateReportReportReviewPageMutation = { __typename?: 'Mutation', updateReport?: { __typename?: 'UpdateReportPayload', report: { __typename?: 'Report', id: string, summary?: string | undefined, department?: string | undefined, status: ReportStatus }, trainee: { __typename?: 'Trainee', id: string, openReportsCount: number } } | undefined }; export type UpdateReportMutationVariables = Exact<{ id: Scalars['ID']; - summary?: Maybe; - department?: Maybe; - status?: Maybe; + summary?: InputMaybe; + department?: InputMaybe; + status?: InputMaybe; }>; -export type UpdateReportMutation = ( - { __typename?: 'Mutation' } - & { updateReport?: Maybe<( - { __typename?: 'UpdateReportPayload' } - & { report: ( - { __typename?: 'Report' } - & Pick - ) } - )> } -); +export type UpdateReportMutation = { __typename?: 'Mutation', updateReport?: { __typename?: 'UpdateReportPayload', report: { __typename?: 'Report', id: string, summary?: string | undefined, department?: string | undefined, status: ReportStatus } } | undefined }; export type UpdateTraineeMutationVariables = Exact<{ input: UpdateTraineeInput; @@ -1142,17 +874,7 @@ export type UpdateTraineeMutationVariables = Exact<{ }>; -export type UpdateTraineeMutation = ( - { __typename?: 'Mutation' } - & { updateTrainee?: Maybe<( - { __typename?: 'Trainee' } - & Pick - & { company: ( - { __typename?: 'Company' } - & Pick - ) } - )> } -); +export type UpdateTraineeMutation = { __typename?: 'Mutation', updateTrainee?: { __typename?: 'Trainee', id: string, startDate?: string | undefined, startOfToolUsage?: string | undefined, endDate?: string | undefined, firstName: string, lastName: string, email: string, avatar: string, company: { __typename?: 'Company', id: string } } | undefined }; export type UpdateTrainerMutationVariables = Exact<{ input: UpdateTrainerInput; @@ -1160,127 +882,47 @@ export type UpdateTrainerMutationVariables = Exact<{ }>; -export type UpdateTrainerMutation = ( - { __typename?: 'Mutation' } - & { updateTrainer?: Maybe<( - { __typename?: 'Trainer' } - & Pick - )> } -); +export type UpdateTrainerMutation = { __typename?: 'Mutation', updateTrainer?: { __typename?: 'Trainer', id: string, firstName: string, lastName: string, email: string, avatar: string, type: UserTypeEnum } | undefined }; + +export type AdminMentorPageQueryVariables = Exact<{ [key: string]: never; }>; + + +export type AdminMentorPageQuery = { __typename?: 'Query', mentors: Array<{ __typename?: 'Mentor', id: string, firstName: string, lastName: string, avatar: string, deleteAt?: string | undefined }> }; export type AdminTraineesPageQueryVariables = Exact<{ [key: string]: never; }>; -export type AdminTraineesPageQuery = ( - { __typename?: 'Query' } - & { trainees: Array<( - { __typename?: 'Trainee' } - & Pick - )>, companies?: Maybe - )>> } -); +export type AdminTraineesPageQuery = { __typename?: 'Query', trainees: Array<{ __typename?: 'Trainee', id: string, firstName: string, lastName: string, avatar: string, deleteAt?: string | undefined }>, companies?: Array<{ __typename?: 'Company', id: string, name: string }> | undefined }; export type AdminTrainersPageQueryVariables = Exact<{ [key: string]: never; }>; -export type AdminTrainersPageQuery = ( - { __typename?: 'Query' } - & { trainers: Array<( - { __typename?: 'Trainer' } - & Pick - )> } -); +export type AdminTrainersPageQuery = { __typename?: 'Query', trainers: Array<{ __typename?: 'Trainer', id: string, firstName: string, lastName: string, avatar: string, deleteAt?: string | undefined }> }; export type AlexaLinkingUrlQueryVariables = Exact<{ [key: string]: never; }>; -export type AlexaLinkingUrlQuery = ( - { __typename?: 'Query' } - & Pick -); +export type AlexaLinkingUrlQuery = { __typename?: 'Query', alexaLinkingUrl?: string | undefined }; export type ArchivePageDataQueryVariables = Exact<{ [key: string]: never; }>; -export type ArchivePageDataQuery = ( - { __typename?: 'Query' } - & { currentUser?: Maybe<( - { __typename?: 'Admin' } - & Pick - ) | ( - { __typename?: 'Trainee' } - & Pick - ) | ( - { __typename?: 'Trainer' } - & Pick - )>, reports: Array - & { days: Array<( - { __typename?: 'Day' } - & Pick - & { entries: Array<( - { __typename?: 'Entry' } - & Pick - )> } - )> } - )>> } -); +export type ArchivePageDataQuery = { __typename?: 'Query', currentUser?: { __typename?: 'Admin', id: string, theme?: string | undefined, firstName: string, lastName: string, language?: string | undefined } | { __typename?: 'Mentor', id: string, theme?: string | undefined, firstName: string, lastName: string, language?: string | undefined } | { __typename?: 'Trainee', id: string, theme?: string | undefined, firstName: string, lastName: string, language?: string | undefined } | { __typename?: 'Trainer', id: string, theme?: string | undefined, firstName: string, lastName: string, language?: string | undefined } | undefined, reports: Array<{ __typename: 'Report', id: string, week: number, year: number, status: ReportStatus, department?: string | undefined, days: Array<{ __typename?: 'Day', status?: DayStatusEnum | undefined, entries: Array<{ __typename?: 'Entry', id: string, time: number }> }> } | undefined> }; export type CommentBoxDataQueryVariables = Exact<{ [key: string]: never; }>; -export type CommentBoxDataQuery = ( - { __typename?: 'Query' } - & { currentUser?: Maybe<( - { __typename?: 'Admin' } - & Pick - ) | ( - { __typename?: 'Trainee' } - & Pick - ) | ( - { __typename?: 'Trainer' } - & Pick - )> } -); +export type CommentBoxDataQuery = { __typename?: 'Query', currentUser?: { __typename?: 'Admin', id: string } | { __typename?: 'Mentor', id: string } | { __typename?: 'Trainee', id: string } | { __typename?: 'Trainer', id: string } | undefined }; export type ConfigQueryVariables = Exact<{ [key: string]: never; }>; -export type ConfigQuery = ( - { __typename?: 'Query' } - & { config: ( - { __typename?: 'LaraConfig' } - & Pick - ) } -); +export type ConfigQuery = { __typename?: 'Query', config: { __typename?: 'LaraConfig', minWorkDayMinutes: number, maxWorkDayMinutes: number, expectedWorkDayMinutes: number, minEducationDayMinutes: number, maxEducationDayMinutes: number, maxEntryMinutes: number, maxPeriodYearsCount: number, finishedWeekDayCount: number } }; export type CurrentUserQueryVariables = Exact<{ [key: string]: never; }>; -export type CurrentUserQuery = ( - { __typename?: 'Query' } - & { currentUser?: Maybe<( - { __typename?: 'Admin' } - & Pick - ) | ( - { __typename?: 'Trainee' } - & Pick - & { company: ( - { __typename?: 'Company' } - & Pick - ) } - ) | ( - { __typename?: 'Trainer' } - & Pick - & { trainees: Array<( - { __typename?: 'Trainee' } - & Pick - )> } - )> } -); +export type CurrentUserQuery = { __typename?: 'Query', currentUser?: { __typename?: 'Admin', id: string, language?: string | undefined, theme?: string | undefined, type: UserTypeEnum } | { __typename?: 'Mentor', id: string, language?: string | undefined, theme?: string | undefined, type: UserTypeEnum } | { __typename?: 'Trainee', startDate?: string | undefined, endDate?: string | undefined, course?: string | undefined, id: string, language?: string | undefined, theme?: string | undefined, type: UserTypeEnum, company: { __typename?: 'Company', id: string } } | { __typename?: 'Trainer', id: string, language?: string | undefined, theme?: string | undefined, type: UserTypeEnum, trainees: Array<{ __typename?: 'Trainee', id: string }> } | undefined }; export type DashboardPageDataQueryVariables = Exact<{ currentYear: Scalars['Int']; @@ -1288,182 +930,46 @@ export type DashboardPageDataQueryVariables = Exact<{ }>; -export type DashboardPageDataQuery = ( - { __typename?: 'Query' } - & { currentUser?: Maybe<( - { __typename?: 'Admin' } - & Pick - ) | ( - { __typename?: 'Trainee' } - & Pick - ) | ( - { __typename?: 'Trainer' } - & Pick - )>, reports: Array - & { days: Array<( - { __typename?: 'Day' } - & Pick - & { entries: Array<( - { __typename?: 'Entry' } - & Pick - )> } - )> } - )>>, reportForYearAndWeek?: Maybe<( - { __typename?: 'Report' } - & Pick - & { days: Array<( - { __typename?: 'Day' } - & Pick - & { entries: Array<( - { __typename?: 'Entry' } - & Pick - & { comments: Array<( - { __typename?: 'Comment' } - & Pick - & { user: ( - { __typename?: 'Admin' } - & Pick - ) | ( - { __typename?: 'Trainee' } - & Pick - ) | ( - { __typename?: 'Trainer' } - & Pick - ) } - )> } - )>, comments: Array<( - { __typename?: 'Comment' } - & Pick - & { user: ( - { __typename?: 'Admin' } - & Pick - ) | ( - { __typename?: 'Trainee' } - & Pick - ) | ( - { __typename?: 'Trainer' } - & Pick - ) } - )> } - )> } - )> } -); +export type DashboardPageDataQuery = { __typename?: 'Query', currentUser?: { __typename?: 'Admin', id: string, theme?: string | undefined } | { __typename?: 'Mentor', id: string, theme?: string | undefined } | { __typename?: 'Trainee', id: string, theme?: string | undefined } | { __typename?: 'Trainer', id: string, theme?: string | undefined } | undefined, reports: Array<{ __typename: 'Report', id: string, week: number, year: number, status: ReportStatus, department?: string | undefined, days: Array<{ __typename?: 'Day', status?: DayStatusEnum | undefined, entries: Array<{ __typename?: 'Entry', id: string, time: number }> }> } | undefined>, reportForYearAndWeek?: { __typename?: 'Report', id: string, status: ReportStatus, days: Array<{ __typename?: 'Day', status?: DayStatusEnum | undefined, date: string, id: string, entries: Array<{ __typename?: 'Entry', id: string, text: string, time: number, orderId: number, comments: Array<{ __typename?: 'Comment', id: string, user: { __typename?: 'Admin', id: string, firstName: string, lastName: string, avatar: string } | { __typename?: 'Mentor', id: string, firstName: string, lastName: string, avatar: string } | { __typename?: 'Trainee', id: string, firstName: string, lastName: string, avatar: string } | { __typename?: 'Trainer', id: string, firstName: string, lastName: string, avatar: string } }> }>, comments: Array<{ __typename?: 'Comment', id: string, text?: string | undefined, user: { __typename?: 'Admin', id: string, firstName: string, lastName: string, avatar: string } | { __typename?: 'Mentor', id: string, firstName: string, lastName: string, avatar: string } | { __typename?: 'Trainee', id: string, firstName: string, lastName: string, avatar: string } | { __typename?: 'Trainer', id: string, firstName: string, lastName: string, avatar: string } }> }> } | undefined }; export type DayInputDataQueryVariables = Exact<{ [key: string]: never; }>; -export type DayInputDataQuery = ( - { __typename?: 'Query' } - & { currentUser?: Maybe<( - { __typename?: 'Admin' } - & Pick - ) | ( - { __typename?: 'Trainee' } - & Pick - ) | ( - { __typename?: 'Trainer' } - & Pick - )> } -); +export type DayInputDataQuery = { __typename?: 'Query', currentUser?: { __typename?: 'Admin', id: string, firstName: string, lastName: string, avatar: string, type: UserTypeEnum } | { __typename?: 'Mentor', id: string, firstName: string, lastName: string, avatar: string, type: UserTypeEnum } | { __typename?: 'Trainee', id: string, firstName: string, lastName: string, avatar: string, type: UserTypeEnum } | { __typename?: 'Trainer', id: string, firstName: string, lastName: string, avatar: string, type: UserTypeEnum } | undefined }; export type EntryInputDataQueryVariables = Exact<{ [key: string]: never; }>; -export type EntryInputDataQuery = ( - { __typename?: 'Query' } - & { currentUser?: Maybe<( - { __typename?: 'Admin' } - & Pick - ) | ( - { __typename?: 'Trainee' } - & Pick - ) | ( - { __typename?: 'Trainer' } - & Pick - )> } -); +export type EntryInputDataQuery = { __typename?: 'Query', currentUser?: { __typename?: 'Admin', id: string, type: UserTypeEnum, firstName: string, lastName: string, avatar: string, username: string } | { __typename?: 'Mentor', id: string, type: UserTypeEnum, firstName: string, lastName: string, avatar: string, username: string } | { __typename?: 'Trainee', id: string, type: UserTypeEnum, firstName: string, lastName: string, avatar: string, username: string } | { __typename?: 'Trainer', id: string, type: UserTypeEnum, firstName: string, lastName: string, avatar: string, username: string } | undefined }; export type UserPageQueryVariables = Exact<{ id: Scalars['ID']; }>; -export type UserPageQuery = ( - { __typename?: 'Query' } - & { getUser?: Maybe<( - { __typename?: 'Admin' } - & Pick - ) | ( - { __typename?: 'Trainee' } - & Pick - & { company: ( - { __typename?: 'Company' } - & Pick - ), trainer?: Maybe<( - { __typename?: 'Trainer' } - & Pick - )> } - ) | ( - { __typename?: 'Trainer' } - & Pick - & { trainees: Array<( - { __typename?: 'Trainee' } - & Pick - )> } - )>, companies?: Maybe - )>> } -); +export type UserPageQuery = { __typename?: 'Query', getUser?: { __typename?: 'Admin', id: string, avatar: string, firstName: string, lastName: string, email: string, type: UserTypeEnum } | { __typename?: 'Mentor', id: string, avatar: string, firstName: string, lastName: string, email: string, type: UserTypeEnum } | { __typename?: 'Trainee', startDate?: string | undefined, startOfToolUsage?: string | undefined, endDate?: string | undefined, deleteAt?: string | undefined, course?: string | undefined, id: string, avatar: string, firstName: string, lastName: string, email: string, type: UserTypeEnum, company: { __typename?: 'Company', id: string }, trainer?: { __typename?: 'Trainer', id: string, firstName: string, lastName: string, avatar: string } | undefined } | { __typename?: 'Trainer', deleteAt?: string | undefined, id: string, avatar: string, firstName: string, lastName: string, email: string, type: UserTypeEnum, trainees: Array<{ __typename?: 'Trainee', id: string, firstName: string, lastName: string, avatar: string }> } | undefined, companies?: Array<{ __typename?: 'Company', id: string, name: string }> | undefined }; + +export type MentorsPageQueryVariables = Exact<{ [key: string]: never; }>; + + +export type MentorsPageQuery = { __typename?: 'Query', mentors: Array<{ __typename?: 'Mentor', id: string, firstName: string, lastName: string, avatar: string }> }; export type NavigationDataQueryVariables = Exact<{ [key: string]: never; }>; -export type NavigationDataQuery = ( - { __typename?: 'Query' } - & { currentUser?: Maybe<( - { __typename: 'Admin' } - & Pick - ) | ( - { __typename: 'Trainee' } - & Pick - ) | ( - { __typename: 'Trainer' } - & Pick - )> } -); +export type NavigationDataQuery = { __typename?: 'Query', currentUser?: { __typename: 'Admin', type: UserTypeEnum, id: string, firstName: string, lastName: string, avatar: string } | { __typename: 'Mentor', type: UserTypeEnum, id: string, firstName: string, lastName: string, avatar: string } | { __typename: 'Trainee', type: UserTypeEnum, id: string, firstName: string, lastName: string, avatar: string } | { __typename: 'Trainer', type: UserTypeEnum, id: string, firstName: string, lastName: string, avatar: string } | undefined }; export type OnboardingPageDataQueryVariables = Exact<{ [key: string]: never; }>; -export type OnboardingPageDataQuery = ( - { __typename?: 'Query' } - & { currentUser?: Maybe<( - { __typename?: 'Admin' } - & Pick - ) | ( - { __typename?: 'Trainee' } - & Pick - ) | ( - { __typename?: 'Trainer' } - & Pick - )> } -); +export type OnboardingPageDataQuery = { __typename?: 'Query', currentUser?: { __typename?: 'Admin', id: string, firstName: string } | { __typename?: 'Mentor', id: string, firstName: string } | { __typename?: 'Trainee', id: string, firstName: string } | { __typename?: 'Trainer', id: string, firstName: string } | undefined }; export type PrintDataQueryVariables = Exact<{ ids: Array | Scalars['ID']; }>; -export type PrintDataQuery = ( - { __typename?: 'Query' } - & { print: ( - { __typename?: 'PrintPayload' } - & Pick - ) } -); +export type PrintDataQuery = { __typename?: 'Query', print: { __typename?: 'PrintPayload', estimatedWaitingTime: number } }; export type ReportPageDataQueryVariables = Exact<{ year: Scalars['Int']; @@ -1471,70 +977,7 @@ export type ReportPageDataQueryVariables = Exact<{ }>; -export type ReportPageDataQuery = ( - { __typename?: 'Query' } - & { currentUser?: Maybe<( - { __typename?: 'Admin' } - & Pick - ) | ( - { __typename?: 'Trainee' } - & Pick - ) | ( - { __typename?: 'Trainer' } - & Pick - )>, reportForYearAndWeek?: Maybe<( - { __typename?: 'Report' } - & Pick - & { comments: Array<( - { __typename?: 'Comment' } - & Pick - & { user: ( - { __typename?: 'Admin' } - & Pick - ) | ( - { __typename?: 'Trainee' } - & Pick - ) | ( - { __typename?: 'Trainer' } - & Pick - ) } - )>, days: Array<( - { __typename?: 'Day' } - & Pick - & { comments: Array<( - { __typename?: 'Comment' } - & Pick - & { user: ( - { __typename?: 'Admin' } - & Pick - ) | ( - { __typename?: 'Trainee' } - & Pick - ) | ( - { __typename?: 'Trainer' } - & Pick - ) } - )>, entries: Array<( - { __typename?: 'Entry' } - & Pick - & { comments: Array<( - { __typename?: 'Comment' } - & Pick - & { user: ( - { __typename?: 'Admin' } - & Pick - ) | ( - { __typename?: 'Trainee' } - & Pick - ) | ( - { __typename?: 'Trainer' } - & Pick - ) } - )> } - )> } - )> } - )> } -); +export type ReportPageDataQuery = { __typename?: 'Query', currentUser?: { __typename?: 'Admin', id: string, firstName: string, lastName: string, avatar: string, username: string } | { __typename?: 'Mentor', id: string, firstName: string, lastName: string, avatar: string, username: string } | { __typename?: 'Trainee', startOfToolUsage?: string | undefined, endOfToolUsage?: string | undefined, id: string, firstName: string, lastName: string, avatar: string, username: string } | { __typename?: 'Trainer', id: string, firstName: string, lastName: string, avatar: string, username: string } | undefined, reportForYearAndWeek?: { __typename?: 'Report', id: string, week: number, year: number, summary?: string | undefined, department?: string | undefined, status: ReportStatus, previousReportLink?: string | undefined, nextReportLink?: string | undefined, comments: Array<{ __typename?: 'Comment', id: string, text?: string | undefined, user: { __typename?: 'Admin', id: string, firstName: string, lastName: string, avatar: string } | { __typename?: 'Mentor', id: string, firstName: string, lastName: string, avatar: string } | { __typename?: 'Trainee', id: string, firstName: string, lastName: string, avatar: string } | { __typename?: 'Trainer', id: string, firstName: string, lastName: string, avatar: string } }>, days: Array<{ __typename?: 'Day', status?: DayStatusEnum | undefined, date: string, id: string, comments: Array<{ __typename?: 'Comment', id: string, text?: string | undefined, user: { __typename?: 'Admin', id: string, firstName: string, lastName: string, avatar: string } | { __typename?: 'Mentor', id: string, firstName: string, lastName: string, avatar: string } | { __typename?: 'Trainee', id: string, firstName: string, lastName: string, avatar: string } | { __typename?: 'Trainer', id: string, firstName: string, lastName: string, avatar: string } }>, entries: Array<{ __typename?: 'Entry', id: string, text: string, time: number, orderId: number, comments: Array<{ __typename?: 'Comment', id: string, text?: string | undefined, user: { __typename?: 'Admin', id: string, firstName: string, lastName: string, avatar: string } | { __typename?: 'Mentor', id: string, firstName: string, lastName: string, avatar: string } | { __typename?: 'Trainee', id: string, firstName: string, lastName: string, avatar: string } | { __typename?: 'Trainer', id: string, firstName: string, lastName: string, avatar: string } }> }> }> } | undefined }; export type ReportReviewPageDataQueryVariables = Exact<{ year: Scalars['Int']; @@ -1543,204 +986,42 @@ export type ReportReviewPageDataQueryVariables = Exact<{ }>; -export type ReportReviewPageDataQuery = ( - { __typename?: 'Query' } - & { currentUser?: Maybe<( - { __typename?: 'Admin' } - & Pick - ) | ( - { __typename?: 'Trainee' } - & Pick - ) | ( - { __typename?: 'Trainer' } - & Pick - )>, reportForTrainee?: Maybe<( - { __typename?: 'Report' } - & Pick - & { comments: Array<( - { __typename?: 'Comment' } - & Pick - & { user: ( - { __typename?: 'Admin' } - & Pick - ) | ( - { __typename?: 'Trainee' } - & Pick - ) | ( - { __typename?: 'Trainer' } - & Pick - ) } - )>, days: Array<( - { __typename?: 'Day' } - & Pick - & { entries: Array<( - { __typename?: 'Entry' } - & Pick - & { comments: Array<( - { __typename?: 'Comment' } - & Pick - & { user: ( - { __typename?: 'Admin' } - & Pick - ) | ( - { __typename?: 'Trainee' } - & Pick - ) | ( - { __typename?: 'Trainer' } - & Pick - ) } - )> } - )>, comments: Array<( - { __typename?: 'Comment' } - & Pick - & { user: ( - { __typename?: 'Admin' } - & Pick - ) | ( - { __typename?: 'Trainee' } - & Pick - ) | ( - { __typename?: 'Trainer' } - & Pick - ) } - )> } - )> } - )> } -); +export type ReportReviewPageDataQuery = { __typename?: 'Query', currentUser?: { __typename?: 'Admin', id: string, firstName: string, lastName: string, avatar: string, username: string } | { __typename?: 'Mentor', id: string, firstName: string, lastName: string, avatar: string, username: string } | { __typename?: 'Trainee', id: string, firstName: string, lastName: string, avatar: string, username: string } | { __typename?: 'Trainer', id: string, firstName: string, lastName: string, avatar: string, username: string } | undefined, reportForTrainee?: { __typename?: 'Report', id: string, week: number, year: number, summary?: string | undefined, department?: string | undefined, status: ReportStatus, comments: Array<{ __typename?: 'Comment', id: string, text?: string | undefined, user: { __typename?: 'Admin', id: string, firstName: string, lastName: string, avatar: string } | { __typename?: 'Mentor', id: string, firstName: string, lastName: string, avatar: string } | { __typename?: 'Trainee', id: string, firstName: string, lastName: string, avatar: string } | { __typename?: 'Trainer', id: string, firstName: string, lastName: string, avatar: string } }>, days: Array<{ __typename?: 'Day', status?: DayStatusEnum | undefined, date: string, id: string, entries: Array<{ __typename?: 'Entry', id: string, text: string, time: number, orderId: number, comments: Array<{ __typename?: 'Comment', id: string, text?: string | undefined, user: { __typename?: 'Admin', id: string, firstName: string, lastName: string, avatar: string } | { __typename?: 'Mentor', id: string, firstName: string, lastName: string, avatar: string } | { __typename?: 'Trainee', id: string, firstName: string, lastName: string, avatar: string } | { __typename?: 'Trainer', id: string, firstName: string, lastName: string, avatar: string } }> }>, comments: Array<{ __typename?: 'Comment', id: string, text?: string | undefined, user: { __typename?: 'Admin', id: string, firstName: string, lastName: string, avatar: string } | { __typename?: 'Mentor', id: string, firstName: string, lastName: string, avatar: string } | { __typename?: 'Trainee', id: string, firstName: string, lastName: string, avatar: string } | { __typename?: 'Trainer', id: string, firstName: string, lastName: string, avatar: string } }> }> } | undefined }; export type SettingsPageDataQueryVariables = Exact<{ [key: string]: never; }>; -export type SettingsPageDataQuery = ( - { __typename?: 'Query' } - & { currentUser?: Maybe<( - { __typename?: 'Admin' } - & Pick - ) | ( - { __typename?: 'Trainee' } - & Pick - & { company: ( - { __typename?: 'Company' } - & Pick - ) } - ) | ( - { __typename?: 'Trainer' } - & Pick - )>, companies?: Maybe - )>> } -); +export type SettingsPageDataQuery = { __typename?: 'Query', currentUser?: { __typename?: 'Admin', id: string, type: UserTypeEnum, language?: string | undefined, theme?: string | undefined, notification?: boolean | undefined } | { __typename?: 'Mentor', id: string, type: UserTypeEnum, language?: string | undefined, theme?: string | undefined, notification?: boolean | undefined } | { __typename?: 'Trainee', startDate?: string | undefined, endDate?: string | undefined, course?: string | undefined, alexaSkillLinked?: boolean | undefined, id: string, type: UserTypeEnum, language?: string | undefined, theme?: string | undefined, notification?: boolean | undefined, company: { __typename?: 'Company', id: string, name: string } } | { __typename?: 'Trainer', id: string, type: UserTypeEnum, language?: string | undefined, theme?: string | undefined, notification?: boolean | undefined } | undefined, companies?: Array<{ __typename?: 'Company', id: string, name: string }> | undefined }; export type SignatureSettingsDataQueryVariables = Exact<{ [key: string]: never; }>; -export type SignatureSettingsDataQuery = ( - { __typename?: 'Query' } - & { currentUser?: Maybe<( - { __typename?: 'Admin' } - & Pick - ) | ( - { __typename?: 'Trainee' } - & Pick - ) | ( - { __typename?: 'Trainer' } - & Pick - )> } -); +export type SignatureSettingsDataQuery = { __typename?: 'Query', currentUser?: { __typename?: 'Admin', id: string, signature?: string | undefined } | { __typename?: 'Mentor', id: string, signature?: string | undefined } | { __typename?: 'Trainee', id: string, signature?: string | undefined } | { __typename?: 'Trainer', id: string, signature?: string | undefined } | undefined }; export type SuggestionsDataQueryVariables = Exact<{ [key: string]: never; }>; -export type SuggestionsDataQuery = ( - { __typename?: 'Query' } - & Pick -); +export type SuggestionsDataQuery = { __typename?: 'Query', suggestions: Array }; export type TraineePageDataQueryVariables = Exact<{ [key: string]: never; }>; -export type TraineePageDataQuery = ( - { __typename?: 'Query' } - & { trainees: Array<( - { __typename?: 'Trainee' } - & Pick - & { trainer?: Maybe<( - { __typename?: 'Trainer' } - & Pick - )>, company: ( - { __typename?: 'Company' } - & Pick - ) } - )>, currentUser?: Maybe<( - { __typename?: 'Admin' } - & Pick - ) | ( - { __typename?: 'Trainee' } - & Pick - ) | ( - { __typename?: 'Trainer' } - & Pick - )> } -); +export type TraineePageDataQuery = { __typename?: 'Query', trainees: Array<{ __typename?: 'Trainee', id: string, username: string, firstName: string, lastName: string, course?: string | undefined, avatar: string, startDate?: string | undefined, trainer?: { __typename?: 'Trainer', id: string, firstName: string, lastName: string } | undefined, company: { __typename?: 'Company', id: string, name: string } }>, currentUser?: { __typename?: 'Admin', id: string } | { __typename?: 'Mentor', id: string } | { __typename?: 'Trainee', id: string } | { __typename?: 'Trainer', id: string } | undefined }; export type TraineeSettingsDataQueryVariables = Exact<{ [key: string]: never; }>; -export type TraineeSettingsDataQuery = ( - { __typename?: 'Query' } - & { currentUser?: Maybe<{ __typename?: 'Admin' } | ( - { __typename: 'Trainee' } - & Pick - & { company: ( - { __typename?: 'Company' } - & Pick - ), trainer?: Maybe<( - { __typename?: 'Trainer' } - & Pick - )> } - ) | { __typename?: 'Trainer' }> } -); +export type TraineeSettingsDataQuery = { __typename?: 'Query', currentUser?: { __typename?: 'Admin' } | { __typename?: 'Mentor' } | { __typename: 'Trainee', id: string, startDate?: string | undefined, endDate?: string | undefined, course?: string | undefined, company: { __typename?: 'Company', id: string, name: string }, trainer?: { __typename?: 'Trainer', firstName: string, lastName: string, avatar: string } | undefined } | { __typename?: 'Trainer' } | undefined }; export type TrainerReportsPageDataQueryVariables = Exact<{ [key: string]: never; }>; -export type TrainerReportsPageDataQuery = ( - { __typename?: 'Query' } - & { currentUser?: Maybe<( - { __typename?: 'Admin' } - & Pick - ) | ( - { __typename?: 'Trainee' } - & Pick - ) | ( - { __typename?: 'Trainer' } - & Pick - & { trainees: Array<( - { __typename?: 'Trainee' } - & Pick - & { reports: Array<( - { __typename?: 'Report' } - & Pick - & { days: Array<( - { __typename?: 'Day' } - & Pick - )> } - )> } - )> } - )> } -); +export type TrainerReportsPageDataQuery = { __typename?: 'Query', currentUser?: { __typename?: 'Admin', id: string, theme?: string | undefined } | { __typename?: 'Mentor', id: string, theme?: string | undefined } | { __typename?: 'Trainee', id: string, theme?: string | undefined } | { __typename?: 'Trainer', id: string, theme?: string | undefined, trainees: Array<{ __typename?: 'Trainee', username: string, firstName: string, lastName: string, id: string, avatar: string, openReportsCount: number, reports: Array<{ __typename?: 'Report', id: string, status: ReportStatus, week: number, year: number, days: Array<{ __typename?: 'Day', status?: DayStatusEnum | undefined }> }> }> } | undefined }; export type TrainersPageQueryVariables = Exact<{ [key: string]: never; }>; -export type TrainersPageQuery = ( - { __typename?: 'Query' } - & { trainers: Array<( - { __typename?: 'Trainer' } - & Pick - )> } -); +export type TrainersPageQuery = { __typename?: 'Query', trainers: Array<{ __typename?: 'Trainer', id: string, firstName: string, lastName: string, avatar: string }> }; export const ApplicationSettingsUpdateUserDocument = gql` @@ -1886,6 +1167,23 @@ export function useCreateEntryMutation(baseOptions?: Apollo.MutationHookOptions< return Apollo.useMutation(CreateEntryDocument, options); } export type CreateEntryMutationHookResult = ReturnType; +export const CreateMentorDocument = gql` + mutation CreateMentor($input: CreateMentorInput!) { + createMentor(input: $input) { + id + avatar + firstName + lastName + email + type + } +} + `; +export function useCreateMentorMutation(baseOptions?: Apollo.MutationHookOptions) { + const options = {...defaultOptions, ...baseOptions} + return Apollo.useMutation(CreateMentorDocument, options); + } +export type CreateMentorMutationHookResult = ReturnType; export const CreateOAuthCodeDocument = gql` mutation createOAuthCode { createOAuthCode @@ -2172,6 +1470,23 @@ export function useUpdateEntryMutation(baseOptions?: Apollo.MutationHookOptions< return Apollo.useMutation(UpdateEntryDocument, options); } export type UpdateEntryMutationHookResult = ReturnType; +export const UpdateMentorDocument = gql` + mutation UpdateMentor($input: UpdateMentorInput!, $id: ID!) { + updateMentor(input: $input, id: $id) { + id + firstName + lastName + email + avatar + type + } +} + `; +export function useUpdateMentorMutation(baseOptions?: Apollo.MutationHookOptions) { + const options = {...defaultOptions, ...baseOptions} + return Apollo.useMutation(UpdateMentorDocument, options); + } +export type UpdateMentorMutationHookResult = ReturnType; export const UpdateReportReportReviewPageDocument = gql` mutation updateReportReportReviewPage($id: ID!, $summary: String, $department: String, $status: String) { updateReport( @@ -2259,6 +1574,27 @@ export function useUpdateTrainerMutation(baseOptions?: Apollo.MutationHookOption return Apollo.useMutation(UpdateTrainerDocument, options); } export type UpdateTrainerMutationHookResult = ReturnType; +export const AdminMentorPageDocument = gql` + query AdminMentorPage { + mentors { + id + firstName + lastName + avatar + deleteAt + } +} + `; +export function useAdminMentorPageQuery(baseOptions?: Apollo.QueryHookOptions) { + const options = {...defaultOptions, ...baseOptions} + return Apollo.useQuery(AdminMentorPageDocument, options); + } +export function useAdminMentorPageLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) { + const options = {...defaultOptions, ...baseOptions} + return Apollo.useLazyQuery(AdminMentorPageDocument, options); + } +export type AdminMentorPageQueryHookResult = ReturnType; +export type AdminMentorPageLazyQueryHookResult = ReturnType; export const AdminTraineesPageDocument = gql` query AdminTraineesPage { trainees { @@ -2592,6 +1928,26 @@ export function useUserPageLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions; export type UserPageLazyQueryHookResult = ReturnType; +export const MentorsPageDocument = gql` + query MentorsPage { + mentors { + id + firstName + lastName + avatar + } +} + `; +export function useMentorsPageQuery(baseOptions?: Apollo.QueryHookOptions) { + const options = {...defaultOptions, ...baseOptions} + return Apollo.useQuery(MentorsPageDocument, options); + } +export function useMentorsPageLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) { + const options = {...defaultOptions, ...baseOptions} + return Apollo.useLazyQuery(MentorsPageDocument, options); + } +export type MentorsPageQueryHookResult = ReturnType; +export type MentorsPageLazyQueryHookResult = ReturnType; export const NavigationDataDocument = gql` query NavigationData { currentUser { diff --git a/packages/frontend/src/graphql/mutations/create-mentor.gql b/packages/frontend/src/graphql/mutations/create-mentor.gql new file mode 100644 index 0000000..6ed08d2 --- /dev/null +++ b/packages/frontend/src/graphql/mutations/create-mentor.gql @@ -0,0 +1,10 @@ +mutation CreateMentor($input: CreateMentorInput!) { + createMentor(input: $input) { + id + avatar + firstName + lastName + email + type + } +} diff --git a/packages/frontend/src/graphql/mutations/update-mentor.gql b/packages/frontend/src/graphql/mutations/update-mentor.gql new file mode 100644 index 0000000..8649297 --- /dev/null +++ b/packages/frontend/src/graphql/mutations/update-mentor.gql @@ -0,0 +1,10 @@ +mutation UpdateMentor($input: UpdateMentorInput!, $id: ID!) { + updateMentor(input: $input, id: $id) { + id + firstName + lastName + email + avatar + type + } +} diff --git a/packages/frontend/src/graphql/queries/admin-mentor-page.gql b/packages/frontend/src/graphql/queries/admin-mentor-page.gql new file mode 100644 index 0000000..2b31aee --- /dev/null +++ b/packages/frontend/src/graphql/queries/admin-mentor-page.gql @@ -0,0 +1,9 @@ +query AdminMentorPage { + mentors { + id + firstName + lastName + avatar + deleteAt + } +} diff --git a/packages/frontend/src/graphql/queries/mentor-data.gql b/packages/frontend/src/graphql/queries/mentor-data.gql new file mode 100644 index 0000000..deba159 --- /dev/null +++ b/packages/frontend/src/graphql/queries/mentor-data.gql @@ -0,0 +1,8 @@ +query MentorsPage { + mentors { + id + firstName + lastName + avatar + } +} diff --git a/packages/frontend/src/locales/de.ts b/packages/frontend/src/locales/de.ts index a829b56..abc36ea 100644 --- a/packages/frontend/src/locales/de.ts +++ b/packages/frontend/src/locales/de.ts @@ -293,7 +293,9 @@ const germanTranslation: Translation = { reports: 'Berichte', trainees: 'Auszubildende', trainer: 'Ausbilder', + mentor: 'Ausbildungsbeauftragte', dashhboard: 'Dashboard', + paper: 'Paper', archive: 'Archiv', settings: 'Einstellungen', }, @@ -368,12 +370,24 @@ const germanTranslation: Translation = { 'Trage hier die Daten des neuen Ausbilders / der neuen Ausbilderin ein, damit er/sie sich anmelden kann. Die Daten können später noch überarbeitet werden.', success: 'Der/Die Ausbilder:in {0} wurde erfolgreich angelegt und kann den Account jetzt nutzen.', }, + createMentor: { + title: 'Neuer Ausbildungsbeauftragte', + description: + 'Trage hier die Daten des neuen Ausbilders / der neuen Ausbilderin ein, damit er/sie sich anmelden kann. Die Daten können später noch überarbeitet werden.', + success: 'Der/Die Ausbilder:in {0} wurde erfolgreich angelegt und kann den Account jetzt nutzen.', + }, deleteTrainer: { title: '{0} wirklich löschen?', description: 'Wenn du den Benutzer löscht, wird der Account zunächst für 24 Stunden deaktiviert. Danach erhälst du eine E-mail mit der Möglichkeit den Account entgültig zu löschen. ', success: 'Du erhältst in Kürze eine E-mail mit der Option den Nutzer zu Löschen.', }, + deleteMentor: { + title: '{0} wirklich löschen?', + description: + 'Wenn du den Benutzer löscht, wird der Account zunächst für 24 Stunden deaktiviert. Danach erhälst du eine E-mail mit der Möglichkeit den Account entgültig zu löschen. ', + success: 'Du erhältst in Kürze eine E-mail mit der Option den Nutzer zu Löschen.', + }, admin: { marking: 'Markiert zur Löschung', }, diff --git a/packages/frontend/src/locales/en.ts b/packages/frontend/src/locales/en.ts index ebf452a..28691f4 100644 --- a/packages/frontend/src/locales/en.ts +++ b/packages/frontend/src/locales/en.ts @@ -289,6 +289,8 @@ const englishTranslation: Translation = { reports: 'Reports', trainees: 'Trainees', trainer: 'Trainer', + mentor: 'mentor', + paper: 'Paper', dashhboard: 'Dashboard', archive: 'Archive', settings: 'Settings', @@ -364,12 +366,25 @@ const englishTranslation: Translation = { 'Please enter the informations of the new Trainer here so she/he can login. You can still change the data later.', success: 'The trainer {0} has been created', }, + createMentor: { + title: 'New Mentor', + description: + 'Please enter the informations of the new Trainer here so she/he can login. You can still change the data later.', + success: 'The trainer {0} has been created', + }, deleteTrainer: { title: 'Delete {0}?', description: 'If you delete the user, the account will be deactivated for 24 hours. After that you will receive an email with the possibility to delete the account. ', success: 'Du erhältst in Kürze eine E-mail mit der Option den Nutzer zu Löschen.', }, + + deleteMentor: { + title: 'Delete {0}?', + description: + 'If you delete the user, the account will be deactivated for 24 hours. After that you will receive an email with the possibility to delete the account. ', + success: 'Du erhältst in Kürze eine E-mail mit der Option den Nutzer zu Löschen.', + }, userDelete: { title: 'User deactivated', description: 'Shortly you will receive an email with the option to delete the user. ', diff --git a/packages/frontend/src/locales/translation.ts b/packages/frontend/src/locales/translation.ts index be60f4c..925a02d 100644 --- a/packages/frontend/src/locales/translation.ts +++ b/packages/frontend/src/locales/translation.ts @@ -279,6 +279,8 @@ export default interface Translation { reports: string trainees: string trainer: string + mentor: string + paper: string dashhboard: string archive: string settings: string @@ -343,11 +345,21 @@ export default interface Translation { description: string success: string } + createMentor: { + title: string + description: string + success: string + } deleteTrainer: { title: string description: string success: string } + deleteMentor: { + title: string + description: string + success: string + } admin: { marking: string } diff --git a/packages/frontend/src/pages/admin-mentor-page.tsx b/packages/frontend/src/pages/admin-mentor-page.tsx new file mode 100644 index 0000000..d90fc69 --- /dev/null +++ b/packages/frontend/src/pages/admin-mentor-page.tsx @@ -0,0 +1,87 @@ +import { GraphQLError } from 'graphql' +import React from 'react' + +import { AdminCreateUserLayout, AdminOverviewLayout, H1, Paragraph } from '@lara/components' + +import { TrainerForm, EditTrainerFormData } from '../components/trainer-form' +import { EditUserRow } from '../components/edit-user-row' +import { Fab } from '../components/fab' +import Loader from '../components/loader' +import Modal from '../components/modal' + +import { + useAdminMentorPageQuery, + useCreateMentorMutation +} from '../graphql' +import { useToastContext } from '../hooks/use-toast-context' +import strings from '../locales/localization' +import { Template } from '../templates/template' + +export const AdminMentorPage: React.FC = () => { + const { loading, data } = useAdminMentorPageQuery() + const [mutate] = useCreateMentorMutation() + + const { addToast } = useToastContext() + + const [showModal, setShowModal] = React.useState(false) + + const createMentor = async (data: EditTrainerFormData) => { + await mutate({ + variables: { input: data }, + updateQueries: { + AdminMentorPage: (prevData, { mutationResult }) => { + return { + ...prevData, + Mentor: [...prevData.mentor, mutationResult.data?.createMentor], + } + }, + }, + }) + .then(() => { + addToast({ + icon: 'PersonNew', + title: strings.createMentor.title, + text: strings.formatString(strings.createMentor.success, `${data?.firstName} ${data?.lastName}`).toString(), + type: 'success', + }) + + setShowModal(false) + }) + .catch((exception: GraphQLError) => { + addToast({ + title: strings.errors.error, + text: exception.message, + type: 'error', + }) + }) + } + + return ( + + ) +} diff --git a/packages/frontend/src/routes.tsx b/packages/frontend/src/routes.tsx index ee1330f..9d9e71b 100644 --- a/packages/frontend/src/routes.tsx +++ b/packages/frontend/src/routes.tsx @@ -1,12 +1,13 @@ import React from 'react' import { Redirect, Route, RouteProps, Switch } from 'react-router-dom' -import { Admin, Trainee, Trainer, UserTypeEnum } from './graphql' +import { Admin, Trainee, Trainer, Mentor, UserTypeEnum } from './graphql' import { useAuthentication } from './hooks/use-authentication' import strings from './locales/localization' import { AdminEditUserPage } from './pages/admin-edit-user-page' import { AdminTraineesPage } from './pages/admin-trainees-page' import { AdminTrainerPage } from './pages/admin-trainer-page' +import { AdminMentorPage } from './pages/admin-mentor-page' import { AlexaPage } from './pages/alexa-page' import ArchivePage from './pages/archive-page' import DashboardPage from './pages/dashboard-page' @@ -29,6 +30,7 @@ type RoutesProps = { | Pick | (Pick & { trainees: Pick[] }) | Pick + | Pick } const Routes: React.FunctionComponent = ({ currentUser }) => { @@ -74,6 +76,11 @@ const Routes: React.FunctionComponent = ({ currentUser }) => { routes.push({ path: '/trainees/:trainee?', component: TraineePage }) } + if (currentUser.type === UserTypeEnum.Mentor && currentUser.__typename === 'Mentor') { + // Routes for Mentor + routes.push({ path: '/', exact: true, render: () => }) + } + if (currentUser.type === UserTypeEnum.Admin && currentUser.__typename === 'Admin') { // Routes for admins @@ -82,6 +89,8 @@ const Routes: React.FunctionComponent = ({ currentUser }) => { routes.push({ path: '/trainer', exact: true, component: AdminTrainerPage }) routes.push({ path: '/trainer/:id', component: AdminEditUserPage }) + routes.push({ path: '/mentor', exact: true, component: AdminMentorPage }) + routes.push({ path: '/trainees', exact: true, component: AdminTraineesPage }) routes.push({ path: '/trainees/:id', component: AdminEditUserPage }) } diff --git a/yarn.lock b/yarn.lock index 0ee54ba..6711251 100644 --- a/yarn.lock +++ b/yarn.lock @@ -13427,7 +13427,7 @@ promzard@^0.3.0: dependencies: read "1" -prop-types@^15.6.0, prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1: +prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1: version "15.8.1" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== @@ -13635,14 +13635,6 @@ react-focus-lock@^2.9.0: use-callback-ref "^1.3.0" use-sidecar "^1.1.2" -react-google-login@^5.1.21: - version "5.2.2" - resolved "https://registry.yarnpkg.com/react-google-login/-/react-google-login-5.2.2.tgz#a20b46440c6c1610175ef75baf427118ff0e9859" - integrity sha512-JUngfvaSMcOuV0lFff7+SzJ2qviuNMQdqlsDJkUM145xkGPVIfqWXq9Ui+2Dr6jdJWH5KYdynz9+4CzKjI5u6g== - dependencies: - "@types/react" "*" - prop-types "^15.6.0" - react-hook-form@^7.28.1: version "7.37.0" resolved "https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-7.37.0.tgz#4d1738f092d3d8a3ade34ee892d97350b1032b19" From 8162b895d64fcc46e637bc2e2ffaf39a4a4319b5 Mon Sep 17 00:00:00 2001 From: "alex.opoku" Date: Mon, 27 Feb 2023 12:07:52 +0100 Subject: [PATCH 04/55] fix: fix mentor admin overview --- packages/api/schema.gql | 4 + packages/backend/seeds/users.json | 5 +- packages/backend/src/permissions.ts | 22 +- .../backend/src/resolvers/admin.resolver.ts | 19 +- .../backend/src/services/mentor.service.ts | 4 +- packages/components/src/user-form.tsx | 40 + .../src/components/edit-mentor-content.tsx | 80 + .../frontend/src/components/edit-user-row.tsx | 4 +- .../frontend/src/components/mentor-form.tsx | 183 + packages/frontend/src/graphql/index.tsx | 24 +- .../src/graphql/mutations/create-mentor.gql | 3 + .../src/graphql/mutations/update-mentor.gql | 2 + .../frontend/src/graphql/queries/get-user.gql | 5 + .../src/graphql/queries/mentor-data.gql | 2 + .../src/pages/admin-edit-user-page.tsx | 18 + .../frontend/src/pages/admin-mentor-page.tsx | 7 +- packages/frontend/src/routes.tsx | 1 + yarn.lock | 6409 ++++++++--------- 18 files changed, 3594 insertions(+), 3238 deletions(-) create mode 100644 packages/frontend/src/components/edit-mentor-content.tsx create mode 100644 packages/frontend/src/components/mentor-form.tsx diff --git a/packages/api/schema.gql b/packages/api/schema.gql index ceb40b7..a88c8be 100644 --- a/packages/api/schema.gql +++ b/packages/api/schema.gql @@ -468,6 +468,8 @@ input UpdateMentorInput { email: String firstName: String lastName: String + startDate: String + endDate: String } type Trainer implements UserInterface { @@ -499,6 +501,8 @@ type Mentor implements UserInterface { signature: String theme: String type: UserTypeEnum! + startDate: String + endDate: String username: String! email: String! deleteAt: String diff --git a/packages/backend/seeds/users.json b/packages/backend/seeds/users.json index 1a90c76..1e72b46 100644 --- a/packages/backend/seeds/users.json +++ b/packages/backend/seeds/users.json @@ -50,10 +50,11 @@ "createdAt": "2021-04-08T12:43:48.736Z", "firstName": "Men", "language": "de", + "startDate": "2021-04-08T12:43:48.736Z", + "endDate": "2029-05-06T22:00:00.000Z", "lastName": "Tor", "notification": true, - "startDate": "2019-05-06T22:00:00.000Z", - "endDate": "2029-05-06T22:00:00.000Z", + "deleteAt": "2029-05-06T22:00:00.000Z", "theme": "light", "email": "mentor@exampleCompany.com", "token": "1011" diff --git a/packages/backend/src/permissions.ts b/packages/backend/src/permissions.ts index 340beba..16ea4a5 100644 --- a/packages/backend/src/permissions.ts +++ b/packages/backend/src/permissions.ts @@ -1,6 +1,14 @@ import { and, or, rule, shield } from 'graphql-shield' -import { Admin, AuthenticatedContext, Context, Trainee, Trainer, User } from '@lara/api' +import { + Admin, + AuthenticatedContext, + Context, + Mentor, + Trainee, + Trainer, + User +} from '@lara/api' const { DEBUG } = process.env @@ -22,6 +30,14 @@ const trainer = rule({ cache: 'contextual' })( (_parent, _args, ctx: AuthenticatedContext) => isTrainer(ctx.currentUser) || 'Wrong Usertype' ) +export const isMentor = (user: User): user is Mentor => { + return user.type === 'Mentor' +} + +/*const mentor = rule({ cache: 'contextual' })( + (_parent, _args, ctx: AuthenticatedContext) => isMentor(ctx.currentUser) || 'Wrong Usertype' +)*/ + export const isAdmin = (user: User): user is Admin => { return user.type === 'Admin' } @@ -69,8 +85,8 @@ export const permissions = shield( unlinkAlexa: authenticated, createOAuthCode: authenticated, - /**createMentor: authenticated, - updateMentor: authenticated,**/ + createMentor: and(authenticated, admin, trainer, trainee), + updateMentor: and(authenticated, admin, trainer, trainee), // Trainee and Trainer mutations updateReport: and(authenticated, or(trainee, trainer)), diff --git a/packages/backend/src/resolvers/admin.resolver.ts b/packages/backend/src/resolvers/admin.resolver.ts index 9638006..ada0002 100644 --- a/packages/backend/src/resolvers/admin.resolver.ts +++ b/packages/backend/src/resolvers/admin.resolver.ts @@ -10,9 +10,9 @@ import { User } from '@lara/api' -import { isAdmin, isTrainee, isTrainer } from '../permissions' -import { traineeById } from '../repositories/trainee.repo' -import { trainerById, allTrainers } from '../repositories/trainer.repo' +import {isAdmin, isMentor, isTrainee, isTrainer} from '../permissions' +import {allTrainees, traineeById} from '../repositories/trainee.repo' +import {allTrainers, trainerById } from '../repositories/trainer.repo' import { allUsers, saveUser, updateUser, userByEmail, userById } from '../repositories/user.repo' import { sendDeletionMail } from '../services/email.service' import { deleteTrainee, generateReports, generateTrainee, validateTrainee } from '../services/trainee.service' @@ -20,8 +20,12 @@ import { deleteTrainer, generateTrainer, validateTrainer } from '../services/tra import { avatar, username } from '../services/user.service' import { parseISODateString } from '../utils/date' import { t } from '../i18n' -import {generateMentor, validateMentor} from "../services/mentor.service"; -import {mentorById} from "../repositories/mentor.repo"; +import { + deleteMentor, + generateMentor, + validateMentor +} from "../services/mentor.service"; +import {allMentors, mentorById} from "../repositories/mentor.repo"; export const adminResolver: GqlResolvers = { Admin: { @@ -29,7 +33,9 @@ export const adminResolver: GqlResolvers = { username, }, Query: { + mentors: allMentors, trainers: allTrainers, + trainees: allTrainees, async cleanup() { const users = await allUsers() @@ -56,6 +62,9 @@ export const adminResolver: GqlResolvers = { if (isTrainer(user)) { await deleteTrainer(user) } + if (isMentor(user)) { + await deleteMentor(user) + } }) ) diff --git a/packages/backend/src/services/mentor.service.ts b/packages/backend/src/services/mentor.service.ts index a5532db..f65a07a 100644 --- a/packages/backend/src/services/mentor.service.ts +++ b/packages/backend/src/services/mentor.service.ts @@ -17,10 +17,12 @@ type GenerateMentorOptions = { * @returns New Mentor */ export const generateMentor = async (options: GenerateMentorOptions): Promise => { + const date = new Date(); const mentor: Mentor = { id: v4(), - createdAt: new Date().toISOString(), + createdAt: date.toISOString(), type: 'Mentor', + deleteAt: date.setMonth(date.getMonth() + 4).toLocaleString(), ...options, } diff --git a/packages/components/src/user-form.tsx b/packages/components/src/user-form.tsx index 9086fc0..5ba6a00 100644 --- a/packages/components/src/user-form.tsx +++ b/packages/components/src/user-form.tsx @@ -112,3 +112,43 @@ export const TrainerFormLayout: React.FC = ({ ) } + + +type MentorFormLayoutProps = { + firstNameInput: JSX.Element + lastNameInput: JSX.Element + emailInput: JSX.Element + startDateInput: JSX.Element + endDateInput: JSX.Element + periodSpacer: JSX.Element + buttonControls?: JSX.Element +} +export const MentorFormLayout: React.FC = ({ + firstNameInput, + lastNameInput, + emailInput, + startDateInput, + endDateInput, + periodSpacer, + buttonControls, +}) => { + return ( + + + {firstNameInput} + + {lastNameInput} + + {emailInput} + + + {startDateInput} + {periodSpacer} +
{endDateInput}
+
+
+ + {buttonControls && {buttonControls}} +
+ ) +} diff --git a/packages/frontend/src/components/edit-mentor-content.tsx b/packages/frontend/src/components/edit-mentor-content.tsx new file mode 100644 index 0000000..77b4318 --- /dev/null +++ b/packages/frontend/src/components/edit-mentor-content.tsx @@ -0,0 +1,80 @@ +import {GraphQLError} from 'graphql' +import React from 'react' + +import { + EditUserContentLayout, + RelatedUsersLayout, + Text, +} from '@lara/components' + +import {useToastContext} from '../hooks/use-toast-context' +import strings from '../locales/localization' +import { + MentorForm, + EditMentorFormData +} from './mentor-form' +import {UserInfo} from './user-info' +import {Mentor, useUpdateMentorMutation} from "../graphql"; + +interface EditMentorProps { + mentor: Pick +} + +export const EditMentor: React.FC = ({mentor}) => { + const [mutate] = useUpdateMentorMutation() + const {addToast} = useToastContext() + + const updateMentor = async (data: EditMentorFormData) => { + await mutate({ + variables: { + id: mentor.id, + input: data, + }, + }) + .then(() => { + addToast({ + icon: 'Settings', + title: strings.settings.saveSuccessTitle, + text: strings.settings.saveSuccess, + type: 'success', + }) + }) + .catch((exception: GraphQLError) => { + addToast({ + title: strings.errors.error, + text: exception.message, + type: 'error', + }) + }) + } + + return ( + + } + form={} + relatedUsers={ + + {strings.settings.associatedTrainees} + + } + users={ + ( + {strings.settings.notAssociated} + ) + } + /> + } + /> + ) +} diff --git a/packages/frontend/src/components/edit-user-row.tsx b/packages/frontend/src/components/edit-user-row.tsx index e2aa5ae..d33efff 100644 --- a/packages/frontend/src/components/edit-user-row.tsx +++ b/packages/frontend/src/components/edit-user-row.tsx @@ -3,12 +3,12 @@ import { useHistory } from 'react-router-dom' import { EditUserRowLayout } from '@lara/components' -import { Trainee, Trainer } from '../graphql' +import {Mentor, Trainee, Trainer} from '../graphql' import strings from '../locales/localization' import { SecondaryButton } from './button' import { UserInfo } from './user-info' -type EditUser = Pick +type EditUser = Pick interface EditUserRowProps { user: EditUser diff --git a/packages/frontend/src/components/mentor-form.tsx b/packages/frontend/src/components/mentor-form.tsx new file mode 100644 index 0000000..806faa6 --- /dev/null +++ b/packages/frontend/src/components/mentor-form.tsx @@ -0,0 +1,183 @@ +import React from 'react' +import { useForm } from 'react-hook-form' +import { + Input, + Text, + TextProps, + DefaultTheme, + MentorFormLayout +} from '@lara/components' + +import strings from '../locales/localization' +import { PrimaryButton, SecondaryButton } from './button' +import { useValidationHelper } from '../helper/validation-helper' +import {format, parseISO} from "date-fns"; +import {Mentor} from "../graphql"; + +interface EditMentorFormProps { + mentor?: Pick + submit: (data: EditMentorFormData) => Promise + cancel?: () => void + blurSubmit: boolean +} + +export interface EditMentorFormData { + firstName: string + lastName: string + email: string + startDate: string + endDate: string +} + +const inputLabelProps: TextProps = { + spacing: '1.2px', + weight: 700, + size: 'label', + uppercase: true, +} + +export const MentorForm: React.FC = ({ mentor, submit, blurSubmit, cancel }) => { + const { validateEmail, validateStartDate, validateEndDate } = useValidationHelper() + + const { + register, + handleSubmit, + formState: { errors }, + reset, + } = useForm() + + const onSubmit = handleSubmit((formdata) => { + setUpdating(true) + + submit(formdata).then(() => { + setUpdating(false) + }) + }) + + const onCancel = () => { + reset() + + if (cancel) { + cancel() + } + } + + const [updating, setUpdating] = React.useState(false) + + const getFontColor = (hasError: unknown): keyof DefaultTheme => (hasError ? 'errorRed' : 'darkFont') + return ( +
+ {/* eslint-disable-next-line react/jsx-no-undef */} + + + {strings.settings.firstname} + + + + } + lastNameInput={ + <> + + {strings.settings.lastname} + + + + } + emailInput={ + <> + + {strings.settings.email} + + + + } + startDateInput={ + <> + + {strings.period} + + + + } + periodSpacer={ + + {strings.periodTo} + + } + endDateInput={ + <> + + + } + buttonControls={ + !blurSubmit ? ( + <> + + {strings.cancel} + + + {strings.continue} + + + ) : undefined + } + /> + + ) +} diff --git a/packages/frontend/src/graphql/index.tsx b/packages/frontend/src/graphql/index.tsx index 50ce377..deb10dc 100644 --- a/packages/frontend/src/graphql/index.tsx +++ b/packages/frontend/src/graphql/index.tsx @@ -150,12 +150,14 @@ export type Mentor = UserInterface & { createdAt: Scalars['String']; deleteAt?: Maybe; email: Scalars['String']; + endDate?: Maybe; firstName: Scalars['String']; id: Scalars['ID']; language?: Maybe; lastName: Scalars['String']; notification?: Maybe; signature?: Maybe; + startDate?: Maybe; theme?: Maybe; type: UserTypeEnum; username: Scalars['String']; @@ -602,8 +604,10 @@ export type UpdateCurrentTraineeInput = { export type UpdateMentorInput = { email?: InputMaybe; + endDate?: InputMaybe; firstName?: InputMaybe; lastName?: InputMaybe; + startDate?: InputMaybe; }; export type UpdateReportPayload = { @@ -718,7 +722,7 @@ export type CreateMentorMutationVariables = Exact<{ }>; -export type CreateMentorMutation = { __typename?: 'Mutation', createMentor?: { __typename?: 'Mentor', id: string, avatar: string, firstName: string, lastName: string, email: string, type: UserTypeEnum } | undefined }; +export type CreateMentorMutation = { __typename?: 'Mutation', createMentor?: { __typename?: 'Mentor', id: string, avatar: string, firstName: string, lastName: string, startDate?: string | undefined, endDate?: string | undefined, email: string, type: UserTypeEnum, deleteAt?: string | undefined } | undefined }; export type CreateOAuthCodeMutationVariables = Exact<{ [key: string]: never; }>; @@ -846,7 +850,7 @@ export type UpdateMentorMutationVariables = Exact<{ }>; -export type UpdateMentorMutation = { __typename?: 'Mutation', updateMentor?: { __typename?: 'Mentor', id: string, firstName: string, lastName: string, email: string, avatar: string, type: UserTypeEnum } | undefined }; +export type UpdateMentorMutation = { __typename?: 'Mutation', updateMentor?: { __typename?: 'Mentor', id: string, startDate?: string | undefined, endDate?: string | undefined, firstName: string, lastName: string, email: string, avatar: string, type: UserTypeEnum } | undefined }; export type UpdateReportReportReviewPageMutationVariables = Exact<{ id: Scalars['ID']; @@ -947,12 +951,12 @@ export type UserPageQueryVariables = Exact<{ }>; -export type UserPageQuery = { __typename?: 'Query', getUser?: { __typename?: 'Admin', id: string, avatar: string, firstName: string, lastName: string, email: string, type: UserTypeEnum } | { __typename?: 'Mentor', id: string, avatar: string, firstName: string, lastName: string, email: string, type: UserTypeEnum } | { __typename?: 'Trainee', startDate?: string | undefined, startOfToolUsage?: string | undefined, endDate?: string | undefined, deleteAt?: string | undefined, course?: string | undefined, id: string, avatar: string, firstName: string, lastName: string, email: string, type: UserTypeEnum, company: { __typename?: 'Company', id: string }, trainer?: { __typename?: 'Trainer', id: string, firstName: string, lastName: string, avatar: string } | undefined } | { __typename?: 'Trainer', deleteAt?: string | undefined, id: string, avatar: string, firstName: string, lastName: string, email: string, type: UserTypeEnum, trainees: Array<{ __typename?: 'Trainee', id: string, firstName: string, lastName: string, avatar: string }> } | undefined, companies?: Array<{ __typename?: 'Company', id: string, name: string }> | undefined }; +export type UserPageQuery = { __typename?: 'Query', getUser?: { __typename?: 'Admin', id: string, avatar: string, firstName: string, lastName: string, email: string, type: UserTypeEnum } | { __typename?: 'Mentor', deleteAt?: string | undefined, startDate?: string | undefined, endDate?: string | undefined, id: string, avatar: string, firstName: string, lastName: string, email: string, type: UserTypeEnum } | { __typename?: 'Trainee', startDate?: string | undefined, startOfToolUsage?: string | undefined, endDate?: string | undefined, deleteAt?: string | undefined, course?: string | undefined, id: string, avatar: string, firstName: string, lastName: string, email: string, type: UserTypeEnum, company: { __typename?: 'Company', id: string }, trainer?: { __typename?: 'Trainer', id: string, firstName: string, lastName: string, avatar: string } | undefined } | { __typename?: 'Trainer', deleteAt?: string | undefined, id: string, avatar: string, firstName: string, lastName: string, email: string, type: UserTypeEnum, trainees: Array<{ __typename?: 'Trainee', id: string, firstName: string, lastName: string, avatar: string }> } | undefined, companies?: Array<{ __typename?: 'Company', id: string, name: string }> | undefined }; export type MentorsPageQueryVariables = Exact<{ [key: string]: never; }>; -export type MentorsPageQuery = { __typename?: 'Query', mentors: Array<{ __typename?: 'Mentor', id: string, firstName: string, lastName: string, avatar: string }> }; +export type MentorsPageQuery = { __typename?: 'Query', mentors: Array<{ __typename?: 'Mentor', id: string, firstName: string, lastName: string, startDate?: string | undefined, endDate?: string | undefined, avatar: string }> }; export type NavigationDataQueryVariables = Exact<{ [key: string]: never; }>; @@ -1174,8 +1178,11 @@ export const CreateMentorDocument = gql` avatar firstName lastName + startDate + endDate email type + deleteAt } } `; @@ -1474,6 +1481,8 @@ export const UpdateMentorDocument = gql` mutation UpdateMentor($input: UpdateMentorInput!, $id: ID!) { updateMentor(input: $input, id: $id) { id + startDate + endDate firstName lastName email @@ -1911,6 +1920,11 @@ export const UserPageDocument = gql` avatar } } + ... on Mentor { + deleteAt + startDate + endDate + } } companies { id @@ -1934,6 +1948,8 @@ export const MentorsPageDocument = gql` id firstName lastName + startDate + endDate avatar } } diff --git a/packages/frontend/src/graphql/mutations/create-mentor.gql b/packages/frontend/src/graphql/mutations/create-mentor.gql index 6ed08d2..d22d55e 100644 --- a/packages/frontend/src/graphql/mutations/create-mentor.gql +++ b/packages/frontend/src/graphql/mutations/create-mentor.gql @@ -4,7 +4,10 @@ mutation CreateMentor($input: CreateMentorInput!) { avatar firstName lastName + startDate + endDate email type + deleteAt } } diff --git a/packages/frontend/src/graphql/mutations/update-mentor.gql b/packages/frontend/src/graphql/mutations/update-mentor.gql index 8649297..7202289 100644 --- a/packages/frontend/src/graphql/mutations/update-mentor.gql +++ b/packages/frontend/src/graphql/mutations/update-mentor.gql @@ -1,6 +1,8 @@ mutation UpdateMentor($input: UpdateMentorInput!, $id: ID!) { updateMentor(input: $input, id: $id) { id + startDate + endDate firstName lastName email diff --git a/packages/frontend/src/graphql/queries/get-user.gql b/packages/frontend/src/graphql/queries/get-user.gql index 9e87e84..00323ac 100644 --- a/packages/frontend/src/graphql/queries/get-user.gql +++ b/packages/frontend/src/graphql/queries/get-user.gql @@ -33,6 +33,11 @@ query UserPage($id: ID!) { avatar } } + ... on Mentor { + deleteAt + startDate + endDate + } } companies { id diff --git a/packages/frontend/src/graphql/queries/mentor-data.gql b/packages/frontend/src/graphql/queries/mentor-data.gql index deba159..1342e16 100644 --- a/packages/frontend/src/graphql/queries/mentor-data.gql +++ b/packages/frontend/src/graphql/queries/mentor-data.gql @@ -3,6 +3,8 @@ query MentorsPage { id firstName lastName + startDate + endDate avatar } } diff --git a/packages/frontend/src/pages/admin-edit-user-page.tsx b/packages/frontend/src/pages/admin-edit-user-page.tsx index 665e9fd..5d63c45 100644 --- a/packages/frontend/src/pages/admin-edit-user-page.tsx +++ b/packages/frontend/src/pages/admin-edit-user-page.tsx @@ -14,6 +14,7 @@ import { Template } from '../templates/template' import { Box, Flex } from '@rebass/grid' import Modal from '../components/modal' import { useToastContext } from '../hooks/use-toast-context' +import {EditMentor} from "../components/edit-mentor-content"; type AdminEditUserPageParams = { id: string @@ -88,6 +89,23 @@ export const AdminEditUserPage: React.FunctionComponent = () => { /> )} + {/* Edit Mentor page */} + {!loading && data?.getUser?.__typename === 'Mentor' && ( + + } + content={} + actions={renderDeleteAction(data.getUser.deleteAt)} + /> + )} + {!loading && (

diff --git a/packages/frontend/src/pages/admin-mentor-page.tsx b/packages/frontend/src/pages/admin-mentor-page.tsx index d90fc69..2439311 100644 --- a/packages/frontend/src/pages/admin-mentor-page.tsx +++ b/packages/frontend/src/pages/admin-mentor-page.tsx @@ -3,7 +3,6 @@ import React from 'react' import { AdminCreateUserLayout, AdminOverviewLayout, H1, Paragraph } from '@lara/components' -import { TrainerForm, EditTrainerFormData } from '../components/trainer-form' import { EditUserRow } from '../components/edit-user-row' import { Fab } from '../components/fab' import Loader from '../components/loader' @@ -16,6 +15,7 @@ import { import { useToastContext } from '../hooks/use-toast-context' import strings from '../locales/localization' import { Template } from '../templates/template' +import {EditMentorFormData, MentorForm} from "../components/mentor-form"; export const AdminMentorPage: React.FC = () => { const { loading, data } = useAdminMentorPageQuery() @@ -25,7 +25,7 @@ export const AdminMentorPage: React.FC = () => { const [showModal, setShowModal] = React.useState(false) - const createMentor = async (data: EditTrainerFormData) => { + const createMentor = async (data: EditMentorFormData) => { await mutate({ variables: { input: data }, updateQueries: { @@ -60,7 +60,6 @@ export const AdminMentorPage: React.FC = () => { ) } diff --git a/packages/frontend/src/pages/trainer-paper-page.tsx b/packages/frontend/src/pages/trainer-paper-page.tsx index 9c8aeb1..3a23c5f 100644 --- a/packages/frontend/src/pages/trainer-paper-page.tsx +++ b/packages/frontend/src/pages/trainer-paper-page.tsx @@ -74,94 +74,97 @@ export const TrainerPaperPage: React.FC = ({history}) => { } return ( - diff --git a/packages/frontend/src/pages/trainee-paper-page.tsx b/packages/frontend/src/pages/trainee-paper-page.tsx index e27c281..0f15ba6 100644 --- a/packages/frontend/src/pages/trainee-paper-page.tsx +++ b/packages/frontend/src/pages/trainee-paper-page.tsx @@ -1,30 +1,24 @@ -import { - Container, - H1, - Spacer, StyledDashboardPaperStatus, - StyledIcon, - Text, -} from '@lara/components' +import { Container, H1, Spacer, StyledDashboardPaperStatus, StyledIcon, Text } from '@lara/components' import React from 'react' import Loader from '../components/loader' -import {Template} from '../templates/template' -import {useTraineePageDataQuery} from "../graphql"; -import {Box, Flex} from "@rebass/grid"; -import strings from "../locales/localization"; -import ProgressBar from "../components/progress-bar"; +import { Template } from '../templates/template' +import { useTraineePageDataQuery } from '../graphql' +import { Box, Flex } from '@rebass/grid' +import strings from '../locales/localization' +import ProgressBar from '../components/progress-bar' export const TraineePaperPage: React.FC = () => { - const {loading, data} = useTraineePageDataQuery() + const { loading, data } = useTraineePageDataQuery() if (loading) { - return + return } if (!data) { return null } - const {currentUser} = data + const { currentUser } = data if (!currentUser) { return null } @@ -34,63 +28,46 @@ export const TraineePaperPage: React.FC = () => { {data.trainees.map((trainee) => (
{trainee?.papers && trainee?.papers?.length >= 1 ? ( - trainee?.papers.map(paper => ( - paper?.traineeId == currentUser.id ? - - + trainee?.papers.map((paper) => + paper?.traineeId == currentUser.id ? ( + + -

- {strings.paper.dashboard.title + " " + paper?.client} -

- - - {strings.paper.dashboard.description} - - - - - - - {strings.paper.dashboard.briefing} - - - - - - {strings.paper.dashboard.feedback} - - - - - - {strings.paper.dashboard.conclusion} - - - - - - {strings.paper.dashboard.pdfFeedback} - - - -
- - +

{strings.paper.dashboard.title + ' ' + paper?.client}

+ + {strings.paper.dashboard.description} -
-
- : null - )) - ) : ( - {"Kein Paper"} - )} -
- )) - } + + + + {strings.paper.dashboard.briefing} + + + + {strings.paper.dashboard.feedback} + + + + {strings.paper.dashboard.conclusion} + + + + {strings.paper.dashboard.pdfFeedback} + + + + + + + + + ) : null + ) + ) : ( + {'Kein Paper'} + )} + + ))} ) } diff --git a/packages/frontend/src/pages/trainer-paper-page.tsx b/packages/frontend/src/pages/trainer-paper-page.tsx index 3a23c5f..f0fca6b 100644 --- a/packages/frontend/src/pages/trainer-paper-page.tsx +++ b/packages/frontend/src/pages/trainer-paper-page.tsx @@ -1,36 +1,27 @@ import React from 'react' -import {RouteComponentProps} from 'react-router' +import { RouteComponentProps } from 'react-router' -import { - Container, - H1, - Paragraph, - Spacer, StyledAction, StyledIcon, StyledName, Text, -} from '@lara/components' -import {Box, Flex} from '@rebass/grid' +import { Container, H1, Paragraph, Spacer, StyledAction, StyledIcon, StyledName, Text } from '@lara/components' +import { Box, Flex } from '@rebass/grid' -import {PrimaryButton} from '../components/button' +import { PrimaryButton } from '../components/button' import strings from '../locales/localization' -import {Template} from "../templates/template"; -import EmptyPaper from "../assets/illustrations/empty-paper"; -import { - Trainer, - useDeletePaperMutation, - useTrainerPaperPageDataQuery -} from "../graphql"; -import Loader from "../components/loader"; -import ProgressBar from "../components/progress-bar"; -import Avatar from "../components/avatar"; -import {GraphQLError} from "graphql/index"; -import {useToastContext} from "../hooks/use-toast-context"; +import { Template } from '../templates/template' +import EmptyPaper from '../assets/illustrations/empty-paper' +import { Trainer, useDeletePaperMutation, useTrainerPaperPageDataQuery } from '../graphql' +import Loader from '../components/loader' +import ProgressBar from '../components/progress-bar' +import Avatar from '../components/avatar' +import { GraphQLError } from 'graphql/index' +import { useToastContext } from '../hooks/use-toast-context' -export const TrainerPaperPage: React.FC = ({history}) => { - const {loading, data} = useTrainerPaperPageDataQuery() +export const TrainerPaperPage: React.FC = ({ history }) => { + const { loading, data } = useTrainerPaperPageDataQuery() const [deletePaper] = useDeletePaperMutation() - const {addToast} = useToastContext() + const { addToast } = useToastContext() if (loading) { - return + return } if (!data) { @@ -49,21 +40,22 @@ export const TrainerPaperPage: React.FC = ({history}) => { paperId: paperId, }, updateQueries: { - TrainerPaperPageData: (prevData, {mutationResult}) => { + TrainerPaperPageData: (prevData, { mutationResult }) => { return { ...prevData, papers: mutationResult.data?.deletePaper, } }, }, - }).then(() => { - addToast({ - icon: 'Bulb', - title: strings.paper.deletePaper.title, - text: strings.paper.deletePaper.text, - type: 'success', - }) }) + .then(() => { + addToast({ + icon: 'Bulb', + title: strings.paper.deletePaper.title, + text: strings.paper.deletePaper.text, + type: 'success', + }) + }) .catch((exception: GraphQLError) => { addToast({ title: strings.errors.error, @@ -77,132 +69,101 @@ export const TrainerPaperPage: React.FC = ({history}) => { ) diff --git a/packages/frontend/src/routes.tsx b/packages/frontend/src/routes.tsx index 673bc22..44bbce0 100644 --- a/packages/frontend/src/routes.tsx +++ b/packages/frontend/src/routes.tsx @@ -22,13 +22,13 @@ import ReportPage from './pages/report-page' import ReportReviewPage from './pages/report-review-page' import SettingsPage from './pages/settings-page' import SupportPage from './pages/support-page' -import {TrainerPaperPage} from "./pages/trainer-paper-page"; +import { TrainerPaperPage } from './pages/trainer-paper-page' import TraineePage from './pages/trainee-page' import TrainerReportsPage from './pages/trainer-reports-page' -import {PaperCreateBriefingPage} from "./pages/paper-create-briefing-page"; -import {PaperBriefingPage} from "./pages/paper-briefing-page"; -import {TraineePaperPage} from "./pages/trainee-paper-page"; -import {MentorPaperPage} from "./pages/mentor-paper-page"; +import { PaperCreateBriefingPage } from './pages/paper-create-briefing-page' +import { PaperBriefingPage } from './pages/paper-briefing-page' +import { TraineePaperPage } from './pages/trainee-paper-page' +import { MentorPaperPage } from './pages/mentor-paper-page' type RoutesProps = { currentUser?: diff --git a/packages/print/src/create-pdf.tsx b/packages/print/src/create-pdf.tsx index 001a526..b6bdfe7 100644 --- a/packages/print/src/create-pdf.tsx +++ b/packages/print/src/create-pdf.tsx @@ -3,14 +3,9 @@ import React from 'react' import ReactServerDOM from 'react-dom/server' import { ServerStyleSheet } from 'styled-components' -import { - PrintPaperData, - PrintReportData, - PrintTranslations, - PrintUserData -} from '@lara/api' - -import {PaperTemplate, Template} from './template' +import { PrintPaperData, PrintReportData, PrintTranslations, PrintUserData } from '@lara/api' + +import { PaperTemplate, Template } from './template' export const renderComponent = (component: JSX.Element, styleSheet?: ServerStyleSheet): string => { let element = component diff --git a/packages/print/src/handler.ts b/packages/print/src/handler.ts index 9c4a449..360328e 100644 --- a/packages/print/src/handler.ts +++ b/packages/print/src/handler.ts @@ -4,10 +4,9 @@ import { Handler } from 'aws-lambda' import chromium from 'chrome-aws-lambda' import { Browser, Page } from 'puppeteer-core' -import {EmailPayload, - EmailType, PrintData, PrintPaperData, PrintPayload, PrintReportData} from '@lara/api' +import { EmailPayload, EmailType, PrintData, PrintPaperData, PrintPayload, PrintReportData } from '@lara/api' -import {createPaperPDF, createPDF} from './create-pdf' +import { createPaperPDF, createPDF } from './create-pdf' import { getExport, saveAttachments } from './s3' const { IS_OFFLINE, EMAIL_FUNCTION, FRONTEND_URL } = process.env @@ -68,15 +67,15 @@ export const handler: Handler = async (payloa let outputFile: Buffer | undefined let filename = '' let emailType: EmailType = 'reportExport' - let isPaper = false; + let isPaper = false if (isSingleExport) { - isPaper = data[0].filename.includes("Paper") - if(isPaper){ + isPaper = data[0].filename.includes('Paper') + if (isPaper) { const [paperData] = data as PrintPaperData[] emailType = 'paperBriefing' outputFile = await createPaperPDF(paperData, userData, printTranslations, page) filename = paperData.filename - }else { + } else { const [reportData] = data as PrintReportData[] outputFile = await createPDF(reportData, userData, printTranslations, page) filename = reportData.filename @@ -91,11 +90,11 @@ export const handler: Handler = async (payloa } await saveAttachments(filename, outputFile) - if(isPaper){ - if(userData.type == "Trainee") { + if (isPaper) { + if (userData.type == 'Trainee') { const emailTraineePayload: EmailPayload = { emailType: emailType, - attachments: [{filename}], + attachments: [{ filename }], userData: { receiverEmail: userData.receiverEmail, receiverName: userData.firstName, @@ -110,11 +109,10 @@ export const handler: Handler = async (payloa Payload: JSON.stringify(emailTraineePayload), }) .promise() - } - if(userData.type == "Mentor") { + } else { const emailMentorPayload: EmailPayload = { emailType: emailType, - attachments: [{filename}], + attachments: [{ filename }], userData: { receiverEmail: userData.receiverEmail, receiverName: userData.firstName, diff --git a/packages/print/src/mock.ts b/packages/print/src/mock.ts index 101881c..29a9ea6 100644 --- a/packages/print/src/mock.ts +++ b/packages/print/src/mock.ts @@ -1,8 +1,8 @@ import http, { RequestListener } from 'http' -import {PrintData, PrintPaperData} from '@lara/api' +import { PrintData, PrintPaperData } from '@lara/api' -import {createPaperPage} from './create-pdf' +import { createPaperPage } from './create-pdf' export const DUMMY_DATA: PrintData = { data: [ @@ -124,7 +124,7 @@ export const DUMMY_DATA: PrintData = { mentor: 'Ausbildungsbeauftragter', trainer: 'Ausbilder', trainee: 'Auszubildender', - briefing: 'Briefing' + briefing: 'Briefing', }, emailTranslations: { hello: 'Hallo {{ USER }},', @@ -152,7 +152,7 @@ export const DUMMY_DATA: PrintData = { deleteUser: 'Ein Benutzer wird bald gelöscht', handOver: 'Ein Bericht wurde übergeben', alexa: 'Lara wurde mit Amazon Alexa verknüpft!', - paperBriefing: 'Paper Briefing' + paperBriefing: 'Paper Briefing', }, message: { error: 'etwas ist schiefgegangen. Bitte wende dich an einen Lara Admin oder Entwickler.', @@ -169,7 +169,8 @@ export const DUMMY_DATA: PrintData = { handOver: 'dein Azubi {{ trainee }} hat KW {{ week }} seines Berichtsheft zur Überprüfung abgegeben.', alexa: 'Dein Lara Account wurde mit deinem Amazon Alexa Account verknüpft. Sollte dies ein Fehler sein bitte öffne deine Lara Einstellungen und löse die Verknüpfung wieder auf. Außerdem solltest du dein Passwort ändern.', - paperBriefing: 'im Anhang findest du das Briefing-PDF zu der Ausbildungsstation von Anna. Wir wünschen dir ganz viel Spaß damit.' + paperBriefing: + 'im Anhang findest du das Briefing-PDF zu der Ausbildungsstation von Anna. Wir wünschen dir ganz viel Spaß damit.', }, link: { archive: 'Zum Archive', @@ -186,79 +187,79 @@ export const DUMMY_PAPER_DATA: PrintData = { { filename: 'paperBriefingFile.pdf', paper: { - status: 'InProgress', - briefing: [ - { - id: '1', - questionId: '1', - answer: 'Test Antwort', - question: 'Gegenstand der Arbeit', - hint: 'Nenne hier bitte kurz die allgemeine Tätigkeit/Aufgabe, welche Inhalt der Projektstation ist.' - }, - { - id: '2', - questionId: '1', - answer: 'Test Antwort', - question: 'Gegenstand der Arbeit', - hint: 'Nenne hier bitte kurz die allgemeine Tätigkeit/Aufgabe, welche Inhalt der Projektstation ist.' - }, - { - id: '3', - questionId: '1', - answer: 'Test Antwort', - question: 'Gegenstand der Arbeit', - hint: 'Nenne hier bitte kurz die allgemeine Tätigkeit/Aufgabe, welche Inhalt der Projektstation ist.' - }, - { - id: '1', - questionId: '2', - answer: 'Test Antwort', - question: 'Vorgehen', - hint: 'Nenne hier bitte unter welchen Rahmenbedingungen die Projektstation für den Azubi aufgebaut sein soll.' - }, - { - id: '2', - questionId: '2', - answer: 'Test Antwort', - question: 'Vorgehen', - hint: 'Nenne hier bitte unter welchen Rahmenbedingungen die Projektstation für den Azubi aufgebaut sein soll.' - }, - { - id: '1', - questionId: '3', - answer: 'Test Antwort', - question: 'Lerninhalte Station', - hint: 'Nenne hier welche allgemeinen Inhalte dem Azubi während dem Projekt Zeitraum vermittelt werden sollen.' - }, - { - id: '1', - questionId: '4', - answer: 'Test Antwort', - question: 'Rahmenplan Lerninhalte', - hint: 'Ergänze hier (falls gewollt) zusätzliche Punkte aus dem Rahmenplan, welche du als besonders wichtig erachtest, dass diese im Briefing erwähnt werden.' - }, - { - id: '2', - questionId: '4', - answer: 'Test Antwort', - question: 'Rahmenplan Lerninhalte', - hint: 'Ergänze hier (falls gewollt) zusätzliche Punkte aus dem Rahmenplan, welche du als besonders wichtig erachtest, dass diese im Briefing erwähnt werden.' - }, - { - id: '3', - questionId: '4', - answer: 'Test Antwort', - question: 'Test Frage', - hint: 'Test Hinweis' - }, - ], - client: 'Kunde', - periodStart: '2022-08-07T05:14:28.000Z', - periodEnd: '2025-08-07T05:14:28.000Z', - schoolPeriodStart: '2022-08-07T05:14:28.000Z', - schoolPeriodEnd: '2025-08-07T05:14:28.000Z', - subject: 'Entwicklung', - }, + status: 'InProgress', + briefing: [ + { + id: '1', + questionId: '1', + answer: 'Test Antwort', + question: 'Gegenstand der Arbeit', + hint: 'Nenne hier bitte kurz die allgemeine Tätigkeit/Aufgabe, welche Inhalt der Projektstation ist.', + }, + { + id: '2', + questionId: '1', + answer: 'Test Antwort', + question: 'Gegenstand der Arbeit', + hint: 'Nenne hier bitte kurz die allgemeine Tätigkeit/Aufgabe, welche Inhalt der Projektstation ist.', + }, + { + id: '3', + questionId: '1', + answer: 'Test Antwort', + question: 'Gegenstand der Arbeit', + hint: 'Nenne hier bitte kurz die allgemeine Tätigkeit/Aufgabe, welche Inhalt der Projektstation ist.', + }, + { + id: '1', + questionId: '2', + answer: 'Test Antwort', + question: 'Vorgehen', + hint: 'Nenne hier bitte unter welchen Rahmenbedingungen die Projektstation für den Azubi aufgebaut sein soll.', + }, + { + id: '2', + questionId: '2', + answer: 'Test Antwort', + question: 'Vorgehen', + hint: 'Nenne hier bitte unter welchen Rahmenbedingungen die Projektstation für den Azubi aufgebaut sein soll.', + }, + { + id: '1', + questionId: '3', + answer: 'Test Antwort', + question: 'Lerninhalte Station', + hint: 'Nenne hier welche allgemeinen Inhalte dem Azubi während dem Projekt Zeitraum vermittelt werden sollen.', + }, + { + id: '1', + questionId: '4', + answer: 'Test Antwort', + question: 'Rahmenplan Lerninhalte', + hint: 'Ergänze hier (falls gewollt) zusätzliche Punkte aus dem Rahmenplan, welche du als besonders wichtig erachtest, dass diese im Briefing erwähnt werden.', + }, + { + id: '2', + questionId: '4', + answer: 'Test Antwort', + question: 'Rahmenplan Lerninhalte', + hint: 'Ergänze hier (falls gewollt) zusätzliche Punkte aus dem Rahmenplan, welche du als besonders wichtig erachtest, dass diese im Briefing erwähnt werden.', + }, + { + id: '3', + questionId: '4', + answer: 'Test Antwort', + question: 'Test Frage', + hint: 'Test Hinweis', + }, + ], + client: 'Kunde', + periodStart: '2022-08-07T05:14:28.000Z', + periodEnd: '2025-08-07T05:14:28.000Z', + schoolPeriodStart: '2022-08-07T05:14:28.000Z', + schoolPeriodEnd: '2025-08-07T05:14:28.000Z', + subject: 'Entwicklung', + }, }, ], userData: { @@ -295,7 +296,7 @@ export const DUMMY_PAPER_DATA: PrintData = { mentor: 'Ausbildungsbeauftragter', trainer: 'Ausbilder', trainee: 'Auszubildender', - briefing: 'Briefing' + briefing: 'Briefing', }, emailTranslations: { hello: 'Hallo {{ USER }},', @@ -312,7 +313,7 @@ export const DUMMY_PAPER_DATA: PrintData = { reportInReview: 'Ein Bericht wurde abgegeben', alexa: 'Deine Accounts wurden verknüpft', paperBriefing: 'Dein Paper Briefing', - paperBriefingMail: 'Dein Paper Briefing' + paperBriefingMail: 'Dein Paper Briefing', }, headline: { export: 'Dein Lara-Export!', @@ -323,7 +324,7 @@ export const DUMMY_PAPER_DATA: PrintData = { deleteUser: 'Ein Benutzer wird bald gelöscht', handOver: 'Ein Bericht wurde übergeben', alexa: 'Lara wurde mit Amazon Alexa verknüpft!', - paperBriefing: 'Paper Briefing' + paperBriefing: 'Paper Briefing', }, message: { error: 'etwas ist schiefgegangen. Bitte wende dich an einen Lara Admin oder Entwickler.', @@ -340,7 +341,8 @@ export const DUMMY_PAPER_DATA: PrintData = { handOver: 'dein Azubi {{ trainee }} hat KW {{ week }} seines Berichtsheft zur Überprüfung abgegeben.', alexa: 'Dein Lara Account wurde mit deinem Amazon Alexa Account verknüpft. Sollte dies ein Fehler sein bitte öffne deine Lara Einstellungen und löse die Verknüpfung wieder auf. Außerdem solltest du dein Passwort ändern.', - paperBriefing: 'im Anhang findest du das Briefing-PDF zu der Ausbildungsstation von Anna. Wir wünschen dir ganz viel Spaß damit.' + paperBriefing: + 'im Anhang findest du das Briefing-PDF zu der Ausbildungsstation von Anna. Wir wünschen dir ganz viel Spaß damit.', }, link: { archive: 'Zum Archive', diff --git a/packages/print/src/template.tsx b/packages/print/src/template.tsx index e51f2c3..6eb6510 100644 --- a/packages/print/src/template.tsx +++ b/packages/print/src/template.tsx @@ -1,17 +1,9 @@ import React from 'react' import { createGlobalStyle } from 'styled-components' -import { - lightTheme, StyledPrintPaperEntry, - StyledPrintPaperSubHeadline, - ThemeProvider -} from '@lara/components' +import { lightTheme, StyledPrintPaperEntry, StyledPrintPaperSubHeadline, ThemeProvider } from '@lara/components' -import { - PrintUserData, - PrintReport, - PrintTranslations, PrintBriefing, PrintPaper, -} from '@lara/api' +import { PrintUserData, PrintReport, PrintTranslations, PrintBriefing, PrintPaper } from '@lara/api' import { Spacings, StyledPrintDay, @@ -63,7 +55,6 @@ type PaperTemplateProps = { paper: PrintPaper } - export const Template: React.FC = ({ userData: { traineeSignature, trainerSignature, firstName, lastName, course }, reportPeriod, @@ -182,33 +173,33 @@ export const PaperTemplate: React.FC = ({ {i18n.department}: {paper.subject} - {paper.periodStart ? + {paper.periodStart ? ( {i18n.period}: {paper.periodStart + ' -' + paper.periodEnd} - : null} + ) : null} {i18n.client}: {paper.client} - {paper.schoolPeriodStart ? + {paper.schoolPeriodStart ? ( {i18n.period}: {paper.schoolPeriodStart + ' -' + paper.schoolPeriodEnd} - : null} + ) : null}
{paper.briefing.map((briefing: PrintBriefing, index, array) => { return ( - {index == 0 || array[index].questionId !== array[index-1].questionId ? + {index == 0 || array[index].questionId !== array[index - 1].questionId ? ( <> {briefing.question} {briefing.hint} - : null} + ) : null} {briefing.answer} ) diff --git a/serverless.yml b/serverless.yml index 8595e45..d244afd 100644 --- a/serverless.yml +++ b/serverless.yml @@ -84,7 +84,7 @@ custom: userTrainerId: userGSI6 userOAuthCode: userOAuthCode s3: - export: ${self:provider.environment.COMPANY_ABBREVIATION}-${self:custom.stage}-lara-export-bucket + export: lara-dev-lara-export-bucket ses: region: ${self:provider.environment.SES_REGION, self:provider.region} From 2d30066238e6745484a1a854d74a586b6e3d6e3e Mon Sep 17 00:00:00 2001 From: "alex.opoku" Date: Sun, 21 May 2023 01:49:12 +0200 Subject: [PATCH 20/55] feat: update after paper creation and deletion, english, modal for paper deletion --- packages/backend/seeds/papers.json | 8 +- .../backend/src/test/paper.service.test.ts | 2 +- .../components/src/dashboard-paper-status.ts | 10 -- packages/components/src/icon-definitions.ts | 2 +- packages/components/src/icons/blank.tsx | 4 +- packages/frontend/src/graphql/index.tsx | 3 +- .../queries/trainer-paper-page-data.gql | 1 - packages/frontend/src/locales/de.ts | 17 ++- packages/frontend/src/locales/en.ts | 103 ++++++++------- packages/frontend/src/locales/translation.ts | 5 + .../frontend/src/pages/mentor-paper-page.tsx | 44 ++++--- .../src/pages/paper-briefing-page.tsx | 19 ++- .../frontend/src/pages/trainee-paper-page.tsx | 77 ++++++++--- .../frontend/src/pages/trainer-paper-page.tsx | 122 ++++++++++++++---- 14 files changed, 274 insertions(+), 143 deletions(-) delete mode 100644 packages/components/src/dashboard-paper-status.ts diff --git a/packages/backend/seeds/papers.json b/packages/backend/seeds/papers.json index 9b71e9e..3108a3b 100644 --- a/packages/backend/seeds/papers.json +++ b/packages/backend/seeds/papers.json @@ -3,10 +3,12 @@ "id": "1", "traineeId": "123", "trainerId": "456", - "client": "Solaris", + "client": "Test Kunde", "mentorId": "1011", "periodStart": "2022-08-07T05:14:28.000Z", "periodEnd": "2025-08-07T05:14:28.000Z", + "schoolPeriodEnd": null, + "schoolPeriodStart": null, "subject": "Android Entwicklung", "status": "InProgress", "briefing": [ @@ -23,10 +25,12 @@ "id": "2", "traineeId": "123", "trainerId": "456", - "client": "Solaris", + "client": "Test Kunde", "mentorId": "1011", "periodStart": "2022-08-07T05:14:28.000Z", "periodEnd": "2025-08-07T05:14:28.000Z", + "schoolPeriodEnd": null, + "schoolPeriodStart": null, "subject": "IOS Entwicklung", "status": "InProgress", "briefing": [ diff --git a/packages/backend/src/test/paper.service.test.ts b/packages/backend/src/test/paper.service.test.ts index 755bce8..b2ed41f 100644 --- a/packages/backend/src/test/paper.service.test.ts +++ b/packages/backend/src/test/paper.service.test.ts @@ -56,7 +56,7 @@ describe('createPaperData', () => { expect(paperInput.status).toBe(paper.status) }) - it('returns correct paper status', () => { + it('returns true when the paper has been created by checking if paperId has been created', () => { expect(paper.id).toBeTruthy() }) diff --git a/packages/components/src/dashboard-paper-status.ts b/packages/components/src/dashboard-paper-status.ts deleted file mode 100644 index d823f3d..0000000 --- a/packages/components/src/dashboard-paper-status.ts +++ /dev/null @@ -1,10 +0,0 @@ -import styled from 'styled-components' -import { Spacings } from './spacing' - -export const StyledDashboardPaperStatus = styled.div` - width: 100%; - display: grid; - grid-template-columns: 1fr 1fr; - grid-gap: ${Spacings.s}; - padding-right: ${Spacings.xxxl}; -` diff --git a/packages/components/src/icon-definitions.ts b/packages/components/src/icon-definitions.ts index 33b6ccd..9606ceb 100644 --- a/packages/components/src/icon-definitions.ts +++ b/packages/components/src/icon-definitions.ts @@ -49,7 +49,7 @@ import { IconWork } from './icons/work' import { IconX } from './icons/x' import { IconOptions } from './icons/options' import { IconCheckMark } from './icons/checkMark' -import {IconBlank} from "./icons/blank"; +import { IconBlank } from './icons/blank' export const Icons = { Arrow: IconArrow, diff --git a/packages/components/src/icons/blank.tsx b/packages/components/src/icons/blank.tsx index 4033826..0d30229 100644 --- a/packages/components/src/icons/blank.tsx +++ b/packages/components/src/icons/blank.tsx @@ -1,7 +1,5 @@ import React from 'react' export const IconBlank: React.FC = () => { - return ( - - ) + return } diff --git a/packages/frontend/src/graphql/index.tsx b/packages/frontend/src/graphql/index.tsx index 768519e..82762f8 100644 --- a/packages/frontend/src/graphql/index.tsx +++ b/packages/frontend/src/graphql/index.tsx @@ -1134,7 +1134,7 @@ export type TraineeSettingsDataQuery = { __typename?: 'Query', currentUser?: { _ export type TrainerPaperPageDataQueryVariables = Exact<{ [key: string]: never; }>; -export type TrainerPaperPageDataQuery = { __typename?: 'Query', currentUser?: { __typename?: 'Admin', id: string, theme?: string | undefined } | { __typename?: 'Mentor', id: string, theme?: string | undefined } | { __typename?: 'Trainee', id: string, theme?: string | undefined } | { __typename?: 'Trainer', id: string, theme?: string | undefined, trainees: Array<{ __typename?: 'Trainee', username: string, firstName: string, lastName: string, id: string, avatar: string }>, papers?: Array<{ __typename?: 'Paper', id: string, traineeId: string, trainerId: string, client: string, mentorId: string, periodStart?: string | undefined, periodEnd?: string | undefined, schoolPeriodStart?: string | undefined, schoolPeriodEnd?: string | undefined, subject: string, status: PaperStatus, briefing: Array<{ __typename?: 'PaperFormData', id: string, questionId: string, question: string, answer?: string | undefined, hint?: string | undefined }> } | undefined> | undefined } | undefined }; +export type TrainerPaperPageDataQuery = { __typename?: 'Query', currentUser?: { __typename?: 'Admin', id: string } | { __typename?: 'Mentor', id: string } | { __typename?: 'Trainee', id: string } | { __typename?: 'Trainer', id: string, trainees: Array<{ __typename?: 'Trainee', username: string, firstName: string, lastName: string, id: string, avatar: string }>, papers?: Array<{ __typename?: 'Paper', id: string, traineeId: string, trainerId: string, client: string, mentorId: string, periodStart?: string | undefined, periodEnd?: string | undefined, schoolPeriodStart?: string | undefined, schoolPeriodEnd?: string | undefined, subject: string, status: PaperStatus, briefing: Array<{ __typename?: 'PaperFormData', id: string, questionId: string, question: string, answer?: string | undefined, hint?: string | undefined }> } | undefined> | undefined } | undefined }; export type TrainerReportsPageDataQueryVariables = Exact<{ [key: string]: never; }>; @@ -2676,7 +2676,6 @@ export const TrainerPaperPageDataDocument = gql` query TrainerPaperPageData { currentUser { id - theme ... on Trainer { trainees { username diff --git a/packages/frontend/src/graphql/queries/trainer-paper-page-data.gql b/packages/frontend/src/graphql/queries/trainer-paper-page-data.gql index 1e509c5..88fe548 100644 --- a/packages/frontend/src/graphql/queries/trainer-paper-page-data.gql +++ b/packages/frontend/src/graphql/queries/trainer-paper-page-data.gql @@ -1,7 +1,6 @@ query TrainerPaperPageData { currentUser { id - theme ... on Trainer { trainees { username diff --git a/packages/frontend/src/locales/de.ts b/packages/frontend/src/locales/de.ts index 1c0f81f..f9ab7d7 100644 --- a/packages/frontend/src/locales/de.ts +++ b/packages/frontend/src/locales/de.ts @@ -107,21 +107,26 @@ const germanTranslation: Translation = { '\n' + 'Du kannst das Briefing stattdessen speichern, damit du es später nochmal bearbeiten kannst.', createBriefing: 'Briefing erstellen', - backToPaperTitle: "Briefing wird exportiert", - backToPaperDescription: "Das Lara Paper Briefing wird exportiert und anschließend als PDF an alle Teilnehmer verschickt. Es kann sein, dass du später Lara neuladen musst, um das neu erstellte Paper sehen zu. \n" + - "Hab jetzt etwas Geduld während das Briefing exportiert wird.", - backToPaperButton: "Züruck zur Paper Übersicht" + backToPaperTitle: 'Briefing wird exportiert', + backToPaperDescription: + 'Das Lara Paper Briefing wird exportiert und anschließend als PDF an alle Teilnehmer verschickt. Es kann sein, dass du später Lara neuladen musst, um das neu erstellte Paper sehen zu. \n' + + 'Hab jetzt etwas Geduld während das Briefing exportiert wird.', + backToPaperButton: 'Züruck zur Paper Übersicht', + deletePaperTitle: 'Paper löschen für {kunde}', + deletePaperDescription: 'Bist du sicher, dass du das Paper für den Kunden {kunde} löschen willst?', + deletePaperButtonAgree: 'bestätigen', + deletePaperButtonDisagree: 'abbrechen', }, dashboard: { title: 'Station', - description: - 'Für die Station auf dem Jungheinrich Profishop Projekt von ihrem Azubi steht das Stationsfeedbackgespräch an. Du kannst es hier starten.', + description: 'Für die Station von ihrem Azubi steht das Stationsfeedbackgespräch an. Du kannst es hier starten.', briefing: 'Briefing', feedback: 'Stationsfeedback', conclusion: 'Fazit', pdfFeedback: 'PDF Stationsfeedback', trainee: 'Auszubildender', trainer: 'Ausbilder', + editPaper: 'Paper bearbeiten', }, createPaper: { title: 'Briefing erstellt', diff --git a/packages/frontend/src/locales/en.ts b/packages/frontend/src/locales/en.ts index 73e3972..41c1ee2 100644 --- a/packages/frontend/src/locales/en.ts +++ b/packages/frontend/src/locales/en.ts @@ -42,97 +42,100 @@ const englishTranslation: Translation = { }, paper: { empty: { - headline: 'Briefing/Kick-Off Gespräch', + headline: 'Briefing/Kick-Off Meeting', description: - 'Dein Azubi kommt auf eine neue Station und es steht das Kick-Off Gespräch an? Hier kannst du das Briefing für die Station ausfüllen und vorbereiten. Damit kannst du einene Rahmen über den Umfang und die Themen der Ausbildungssation deines Azubis festlegen.', - createBriefing: 'Briefing erstellen', + "Your apprentice is coming to a new station, and it iss time for the kick-off meeting? Here you can fill out and prepare the briefing for the station. This way, you can set a framework for the scope and topics of your apprentice's training station.", + createBriefing: 'Create briefing', }, createBriefing: { title: 'Briefing', - firstnameMentor: 'Vorname des Ausbildungsbeauftragten', - lastnameMentor: 'Nachname des Ausbildungsbeauftragten', - emailMentor: 'Email des Ausbildungsbeauftragten', - trainee: 'Auszubildender', - department: 'Abteilung', - customer: 'Kunde', - projectPeriod: 'Stations Zeitraum', - schoolPeriod: 'Schulzeitraum', + firstnameMentor: "Mentor's First Name", + lastnameMentor: "Mentor's Last Name", + emailMentor: "Mentor's Email", + trainee: 'Trainee', + department: 'Department', + customer: 'Customer', + projectPeriod: 'Station Period', + schoolPeriod: 'School Period', }, briefingQuestions: { objectOfTheWork: { - question: 'Gegenstand der Arbeit', - hint: 'Nenne hier bitte die allgemeine Tätigkeit/Aufgabe, die Inhalt der Projektstation ist.', + question: 'Object of the Work', + hint: 'Please specify the general activity/task that is the subject of the project station.', }, procedure: { - question: 'Vorgehen', - hint: 'Nenne hier bitte unter welchen Rahmenbedingungen die Projektstation für den Azubi aufgebaut sein soll.', + question: 'Procedure', + hint: 'Please specify the framework conditions under which the project station should be set up for the apprentice.', }, learningContent: { - question: 'Lerninhalte Station', - hint: 'Nenne hier welche allgemeinen Inhalte dem Azubi während dem Projekt Zeitraum vermittelt werden sollen.', + question: 'Learning Content Station', + hint: 'Please specify the general content that the apprentice should be taught during the project period.', }, frameworkPlan: { - question: 'Rahmenplan Lerninhalte', - hint: 'Ergänze hier (falls gewollt) zusätzliche Punkte aus dem Rahmenplan, welche du als besonders wichtig erachtest, dass diese im Briefing erwähnt werden.', + question: 'Framework Plan Learning Content', + hint: 'Add additional points from the framework plan here (if desired) that you consider particularly important to mention in the briefing.', }, tasksAndDutiesTrainee: { - question: 'Aufgaben und Pflichten des Azubis', - hint: 'Nenne hier (falls gewollt), welche Aufgaben und Pflichten dein Azubi zu erfüllen hat. ', + question: 'Tasks and Duties of the Trainee', + hint: 'Please specify (if desired) the tasks and duties that your apprentice has to fulfill.', }, tasksAndDutiesMentor: { - question: 'Aufgaben und Pflichten des Ausbildungsbeauftragten', - hint: 'Nenne hier (falls gewollt), welche Aufgaben und Pflichten der Ausbildungsbeauftragte zu erfüllen hat.', + question: 'Tasks and Duties of the Mentor', + hint: 'Please specify (if desired) the tasks and duties that the mentor has to fulfill.', }, primeBlueAntMyTe: { question: 'Prime / BlueAnt', - hint: 'Fasse hier kurz zusammen auf welchen Posten der Azubi seine Stunden/Aufwände buchen kann/soll.', + hint: 'Briefly summarize the positions where the apprentice can/should book hours/efforts.', }, feedback: { question: 'Feedback', - hint: 'Hier ist im Briefing einmal kurz zusammenefasst, was unter Feedback zu verstehen ist. Du kannst den Vorlagen Text bei Bedarf natürlich noch ergänzen.', + hint: 'Here is a brief summary of what is understood by feedback in the briefing. You can supplement the template text as needed.', }, otherRemarks: { - question: 'Sonstige Anmerkungen', - hint: 'Falls du noch zusätzliche Punkte hast, welche ins Breifing aufgenommen werden sollen, kannst du diese hier festhalten.', + question: 'Other Remarks', + hint: 'If you have any additional points to be included in the briefing, you can note them here.', }, }, modal: { - title: 'Bist du sicher, dass du das Briefing beenden möchtest?', + title: 'Are you sure you want to finish the briefing?', description: - '' + - 'Wenn du auf “Briefing erstellen” drückst, kannst du das Briefing nicht mehr bearbeiten. Das Briefing wird daraufhin als PDF an deinen Azubi und den Ausbildungsbeauftragten per E-Mail gesendet.\n' + - '\n' + - 'Du kannst das Briefing stattdessen speichern, damit du es später nochmal bearbeiten kannst.', - createBriefing: 'Briefing erstellen', - backToPaperTitle: "Briefing wird exportiert", - backToPaperDescription: "Das Lara Paper Briefing wird exportiert und anschließend als E-Mail an alle Teilnehmer verschickt. Es kann sein, dass du später Lara neuladen musst, um das neue rstellte Paper sehen zu können. \n" + - "Hab jetzt etwas Geduld während das Briefing exportiert wird.", - backToPaperButton: "Züruck zur Paper Übersicht" + 'Once you click "Create briefing," you won\'t be able to edit the briefing anymore. The briefing will be sent as a PDF to your apprentice and the training officer via email.\n\nYou can choose to save the briefing instead, so you can edit it later.', + createBriefing: 'Create briefing', + backToPaperTitle: 'Briefing is being exported', + backToPaperDescription: + 'The Lara Paper briefing is being exported and will be sent as an email to all participants. You may need to reload Lara later to see the newly created paper.\n' + + 'Please be patient while the briefing is being exported.', + backToPaperButton: 'Back to Paper Overview', + deletePaperTitle: 'Paper löschen für {0}', + deletePaperDescription: 'Bist du sicher, dass du das Paper für den Kunden {1} löschen willst?', + deletePaperButtonAgree: 'bestätigen', + deletePaperButtonDisagree: 'abbrechen', }, dashboard: { title: 'Station', - description: - 'Für die Station auf dem Jungheinrich Profishop Projekt von ihrem Azubi steht das Stationsfeedbackgespräch an. Du kannst es hier starten.', + description: "It's time for the feedback meeting for your apprentice's station. You can start it here.", briefing: 'Briefing', - feedback: 'Stationsfeedback', - conclusion: 'Fazit', - pdfFeedback: 'PDF Stationsfeedback', - trainee: 'Auszubildender', - trainer: 'Ausbilder', + feedback: 'Station Feedback', + conclusion: 'Conclusion', + pdfFeedback: 'PDF Station Feedback', + trainee: 'Trainee', + trainer: 'Trainer', + editPaper: 'Edit Paper', }, createPaper: { - title: 'Briefing erstellt', - text: 'Das Briefing wurde erstellt', + title: 'Briefing Created', + text: 'The briefing has been created', }, deletePaper: { - title: 'Paper gelöscht', - text: 'Das Lara Paper wurde gelöscht', + title: 'Paper Deleted', + text: 'The Lara Paper has been deleted', }, briefing: { - toastTitle: 'Lara Paper Briefing wird erstellt', - toastDescription: 'Das Briefing wird jetzt erstellt und wird den Teilnehmern per Mail als PDF verschickt', + toastTitle: 'Creating Lara Paper briefing', + toastDescription: 'The briefing is being created now and will be sent to the participants as a PDF via email', }, }, + archivePage: { header: 'Archive', tableHead: { diff --git a/packages/frontend/src/locales/translation.ts b/packages/frontend/src/locales/translation.ts index 2e9c31b..607d96b 100644 --- a/packages/frontend/src/locales/translation.ts +++ b/packages/frontend/src/locales/translation.ts @@ -101,6 +101,10 @@ export default interface Translation { backToPaperTitle: string backToPaperDescription: string backToPaperButton: string + deletePaperTitle: string + deletePaperDescription: string + deletePaperButtonAgree: string + deletePaperButtonDisagree: string } dashboard: { title: string @@ -111,6 +115,7 @@ export default interface Translation { pdfFeedback: string trainee: string trainer: string + editPaper: string } createPaper: { title: string diff --git a/packages/frontend/src/pages/mentor-paper-page.tsx b/packages/frontend/src/pages/mentor-paper-page.tsx index 6f678c2..e64d392 100644 --- a/packages/frontend/src/pages/mentor-paper-page.tsx +++ b/packages/frontend/src/pages/mentor-paper-page.tsx @@ -34,36 +34,50 @@ export const MentorPaperPage: React.FC = () => { -

{strings.paper.dashboard.title + ' ' + paper?.client}

+

{strings.paper.dashboard.title + ' ' + paper?.client + ' - ' + paper?.subject}

{strings.paper.dashboard.description} - - - + + + {paper?.briefing.length ? ( ) : ( )} - {strings.paper.dashboard.briefing} + + {strings.paper.dashboard.briefing} + - + + + - {strings.paper.dashboard.feedback} + + {strings.paper.dashboard.feedback} + - - - + +
+ + + - {strings.paper.dashboard.conclusion} + + {strings.paper.dashboard.conclusion} + - + + + - {strings.paper.dashboard.pdfFeedback} + + {strings.paper.dashboard.pdfFeedback} + - -
+ +
diff --git a/packages/frontend/src/pages/paper-briefing-page.tsx b/packages/frontend/src/pages/paper-briefing-page.tsx index bb593af..e3795dc 100644 --- a/packages/frontend/src/pages/paper-briefing-page.tsx +++ b/packages/frontend/src/pages/paper-briefing-page.tsx @@ -81,6 +81,16 @@ export const PaperBriefingPage: React.FunctionComponent { + return { + currentUser: { + ...prevData, + papers: mutationResult.data?.updatePaper, + }, + } + }, + }, }) .then((result) => { const updatedPaper = result?.data?.updatePaper @@ -139,10 +149,7 @@ export const PaperBriefingPage: React.FunctionComponent - updatePaper(paperBriefing)} - > + updatePaper(paperBriefing)}> {strings.paper.modal.createBriefing} @@ -158,13 +165,13 @@ export const PaperBriefingPage: React.FunctionComponent

{strings.paper.modal.backToPaperTitle}

{strings.paper.modal.backToPaperDescription} - + history.push("/paper")} + onClick={() => history.push('/paper')} > {strings.paper.modal.backToPaperButton} diff --git a/packages/frontend/src/pages/trainee-paper-page.tsx b/packages/frontend/src/pages/trainee-paper-page.tsx index 0f15ba6..a36a37b 100644 --- a/packages/frontend/src/pages/trainee-paper-page.tsx +++ b/packages/frontend/src/pages/trainee-paper-page.tsx @@ -1,4 +1,4 @@ -import { Container, H1, Spacer, StyledDashboardPaperStatus, StyledIcon, Text } from '@lara/components' +import { Container, H1, Paragraph, Spacer, StyledIcon, Text } from '@lara/components' import React from 'react' import Loader from '../components/loader' import { Template } from '../templates/template' @@ -6,6 +6,8 @@ import { useTraineePageDataQuery } from '../graphql' import { Box, Flex } from '@rebass/grid' import strings from '../locales/localization' import ProgressBar from '../components/progress-bar' +import { PrimaryButton } from '../components/button' +import EmptyPaper from '../assets/illustrations/empty-paper' export const TraineePaperPage: React.FC = () => { const { loading, data } = useTraineePageDataQuery() @@ -33,28 +35,50 @@ export const TraineePaperPage: React.FC = () => { -

{strings.paper.dashboard.title + ' ' + paper?.client}

+

{strings.paper.dashboard.title + ' ' + paper?.client + ' - ' + paper?.subject}

{strings.paper.dashboard.description} - - - - {strings.paper.dashboard.briefing} - - - - {strings.paper.dashboard.feedback} - - - - {strings.paper.dashboard.conclusion} - - - - {strings.paper.dashboard.pdfFeedback} - - + + + + {paper?.briefing.length ? ( + + ) : ( + + )} + + {strings.paper.dashboard.briefing} + + + + + + + + {strings.paper.dashboard.feedback} + + + + + + + + + + {strings.paper.dashboard.conclusion} + + + + + + + + {strings.paper.dashboard.pdfFeedback} + + + +
@@ -64,7 +88,18 @@ export const TraineePaperPage: React.FC = () => { ) : null ) ) : ( - {'Kein Paper'} + + +

{strings.paper.empty.headline}

+ {strings.paper.empty.description} + + + {strings.paper.empty.createBriefing} + + + +
+
)}
))} diff --git a/packages/frontend/src/pages/trainer-paper-page.tsx b/packages/frontend/src/pages/trainer-paper-page.tsx index f0fca6b..934d882 100644 --- a/packages/frontend/src/pages/trainer-paper-page.tsx +++ b/packages/frontend/src/pages/trainer-paper-page.tsx @@ -1,10 +1,10 @@ import React from 'react' import { RouteComponentProps } from 'react-router' -import { Container, H1, Paragraph, Spacer, StyledAction, StyledIcon, StyledName, Text } from '@lara/components' +import { Container, H1, H2, Paragraph, Spacer, StyledAction, StyledIcon, StyledName, Text } from '@lara/components' import { Box, Flex } from '@rebass/grid' -import { PrimaryButton } from '../components/button' +import { PrimaryButton, SecondaryButton } from '../components/button' import strings from '../locales/localization' import { Template } from '../templates/template' import EmptyPaper from '../assets/illustrations/empty-paper' @@ -14,11 +14,20 @@ import ProgressBar from '../components/progress-bar' import Avatar from '../components/avatar' import { GraphQLError } from 'graphql/index' import { useToastContext } from '../hooks/use-toast-context' +import PaperModal from '../assets/illustrations/paper-modal-illustraion' +import Modal from '../components/modal' export const TrainerPaperPage: React.FC = ({ history }) => { const { loading, data } = useTrainerPaperPageDataQuery() + const [showDeletePaperModal, setShowDeletePaperModal] = React.useState(false) + const [toDeletePaper, setToDeletePaper] = React.useState('') + const [deletePaper] = useDeletePaperMutation() const { addToast } = useToastContext() + const toggleDeletePaperModal = (paperId: string) => { + setShowDeletePaperModal(!showDeletePaperModal) + setToDeletePaper(paperId) + } if (loading) { return @@ -37,13 +46,16 @@ export const TrainerPaperPage: React.FC = ({ history }) => if (!paperId) return await deletePaper({ variables: { - paperId: paperId, + paperId, }, updateQueries: { TrainerPaperPageData: (prevData, { mutationResult }) => { + console.log(mutationResult.data?.deletePaper) return { - ...prevData, - papers: mutationResult.data?.deletePaper, + currentUser: { + ...prevData, + papers: mutationResult.data?.deletePaper, + }, } }, }, @@ -55,6 +67,7 @@ export const TrainerPaperPage: React.FC = ({ history }) => text: strings.paper.deletePaper.text, type: 'success', }) + toggleDeletePaperModal('') }) .catch((exception: GraphQLError) => { addToast({ @@ -65,10 +78,16 @@ export const TrainerPaperPage: React.FC = ({ history }) => }) } + const navigateToEditPaperPage = (paperId: string) => { + history.push('/paper/briefing/' + paperId) + } + return (