Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 0 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,4 @@ dev.*
.serverless
.env.json
.env
**/db-migration/users.json
**/db-migration/reports.json
tmp
1 change: 0 additions & 1 deletion .prettierignore
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
**/graphql/index.tsx
**/graphql.ts
**/lib/**
**/db-migration/**
.serverless
1 change: 0 additions & 1 deletion eslint.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@ module.exports = [
'node_modules/',
'packages/frontend/src/graphql/index.tsx',
'packages/api/src/graphql.ts',
'packages/db-migration/**',
'**/lib/**',
'**/dist/**',
],
Expand Down
32 changes: 28 additions & 4 deletions packages/api/schema.gql
Original file line number Diff line number Diff line change
Expand Up @@ -181,6 +181,11 @@ type Mutation {
"""
createTrainer(input: CreateTrainerInput!): Trainer

"""
Creates Admin.
"""
createAdmin(input: CreateAdminInput!): Admin

"""
Marks User to be deleted
"""
Expand All @@ -201,6 +206,11 @@ type Mutation {
"""
updateTrainer(input: UpdateTrainerInput!, id: ID!): Trainer

"""
Updates Admin.
"""
updateAdmin(input: UpdateAdminInput!, id: ID!): Admin

"""
Link Alexa account
"""
Expand Down Expand Up @@ -282,6 +292,11 @@ type Query {
"""
trainers: [Trainer!]!

"""
Get all Admins
"""
admins: [Admin!]!

"""
Print single report or report batch
"""
Expand Down Expand Up @@ -365,7 +380,6 @@ type Trainee implements UserInterface {
theme: String
trainer: Trainer
type: UserTypeEnum!
username: String!
email: String!
deleteAt: String
openReportsCount: Int!
Expand Down Expand Up @@ -419,12 +433,23 @@ type Trainer implements UserInterface {
theme: String
trainees: [Trainee!]!
type: UserTypeEnum!
username: String!
email: String!
deleteAt: String
alexaSkillLinked: Boolean
}

input CreateAdminInput {
email: String!
firstName: String!
lastName: String!
}

input UpdateAdminInput {
email: String
firstName: String
lastName: String
}

type Admin implements UserInterface {
createdAt: String!
firstName: String!
Expand All @@ -434,9 +459,9 @@ type Admin implements UserInterface {
notification: Boolean
theme: String
type: UserTypeEnum!
username: String!
email: String!
signature: String
deleteAt: String
alexaSkillLinked: Boolean
}

Expand All @@ -462,7 +487,6 @@ interface UserInterface {
signature: String
theme: String
type: UserTypeEnum!
username: String!
email: String!
alexaSkillLinked: Boolean
}
Expand Down
46 changes: 38 additions & 8 deletions packages/api/src/graphql.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ export type GqlAdmin = GqlUserInterface & {
__typename?: 'Admin';
alexaSkillLinked?: Maybe<Scalars['Boolean']['output']>;
createdAt: Scalars['String']['output'];
deleteAt?: Maybe<Scalars['String']['output']>;
email: Scalars['String']['output'];
firstName: Scalars['String']['output'];
id: Scalars['ID']['output'];
Expand All @@ -32,7 +33,6 @@ export type GqlAdmin = GqlUserInterface & {
signature?: Maybe<Scalars['String']['output']>;
theme?: Maybe<Scalars['String']['output']>;
type: GqlUserTypeEnum;
username: Scalars['String']['output'];
};

export type GqlComment = {
Expand All @@ -56,6 +56,12 @@ export type GqlCompany = {
name: Scalars['String']['output'];
};

export type GqlCreateAdminInput = {
email: Scalars['String']['input'];
firstName: Scalars['String']['input'];
lastName: Scalars['String']['input'];
};

export type GqlCreateCommentPayload = {
__typename?: 'CreateCommentPayload';
comment: GqlComment;
Expand Down Expand Up @@ -148,6 +154,8 @@ export type GqlMutation = {
_devsetusertype: GqlDevSetUserPayload;
/** Claims a Trainee by the current Trainer */
claimTrainee?: Maybe<GqlTrainerTraineePayload>;
/** Creates Admin. */
createAdmin?: Maybe<GqlAdmin>;
/** Creates a new comment on a Day which is identified by the id argument. */
createCommentOnDay: GqlCreateCommentPayload;
/** Creates a new comment on a Entry which is identified by the id argument. */
Expand Down Expand Up @@ -178,6 +186,8 @@ export type GqlMutation = {
unlinkAlexa?: Maybe<GqlUserInterface>;
/** Unmarks User from deletion */
unmarkUserForDeletion?: Maybe<GqlUserInterface>;
/** Updates Admin. */
updateAdmin?: Maybe<GqlAdmin>;
/** Updates the current trainee */
updateCurrentTrainee?: Maybe<GqlTrainee>;
/** Updates the current user */
Expand Down Expand Up @@ -210,6 +220,11 @@ export type GqlMutationClaimTraineeArgs = {
};


export type GqlMutationCreateAdminArgs = {
input: GqlCreateAdminInput;
};


export type GqlMutationCreateCommentOnDayArgs = {
id: Scalars['ID']['input'];
text: Scalars['String']['input'];
Expand Down Expand Up @@ -283,6 +298,12 @@ export type GqlMutationUnmarkUserForDeletionArgs = {
};


export type GqlMutationUpdateAdminArgs = {
id: Scalars['ID']['input'];
input: GqlUpdateAdminInput;
};


export type GqlMutationUpdateCurrentTraineeArgs = {
input: GqlUpdateCurrentTraineeInput;
};
Expand Down Expand Up @@ -345,6 +366,8 @@ export type GqlPrintPayload = {

export type GqlQuery = {
__typename?: 'Query';
/** Get all Admins */
admins: Array<GqlAdmin>;
/** Get the alexa account linking url */
alexaLinkingUrl?: Maybe<Scalars['String']['output']>;
/** Will look for Users to delete */
Expand Down Expand Up @@ -455,7 +478,6 @@ export type GqlTrainee = GqlUserInterface & {
theme?: Maybe<Scalars['String']['output']>;
trainer?: Maybe<GqlTrainer>;
type: GqlUserTypeEnum;
username: Scalars['String']['output'];
};

export type GqlTrainer = GqlUserInterface & {
Expand All @@ -473,7 +495,6 @@ export type GqlTrainer = GqlUserInterface & {
theme?: Maybe<Scalars['String']['output']>;
trainees: Array<GqlTrainee>;
type: GqlUserTypeEnum;
username: Scalars['String']['output'];
};

export type GqlTrainerTraineePayload = {
Expand All @@ -482,6 +503,12 @@ export type GqlTrainerTraineePayload = {
trainer: GqlTrainer;
};

export type GqlUpdateAdminInput = {
email?: InputMaybe<Scalars['String']['input']>;
firstName?: InputMaybe<Scalars['String']['input']>;
lastName?: InputMaybe<Scalars['String']['input']>;
};

export type GqlUpdateCurrentTraineeInput = {
course?: InputMaybe<Scalars['String']['input']>;
};
Expand Down Expand Up @@ -527,7 +554,6 @@ export type GqlUserInterface = {
signature?: Maybe<Scalars['String']['output']>;
theme?: Maybe<Scalars['String']['output']>;
type: GqlUserTypeEnum;
username: Scalars['String']['output'];
};

export type GqlUserTypeEnum =
Expand Down Expand Up @@ -615,6 +641,7 @@ export type GqlResolversTypes = ResolversObject<{
Comment: ResolverTypeWrapper<Comment>;
CommentableInterface: ResolverTypeWrapper<CommentableInterface>;
Company: ResolverTypeWrapper<GqlCompany>;
CreateAdminInput: GqlCreateAdminInput;
CreateCommentPayload: ResolverTypeWrapper<Omit<GqlCreateCommentPayload, 'comment' | 'commentable'> & { comment: GqlResolversTypes['Comment'], commentable: GqlResolversTypes['CommentableInterface'] }>;
CreateTraineeInput: GqlCreateTraineeInput;
CreateTrainerInput: GqlCreateTrainerInput;
Expand All @@ -638,6 +665,7 @@ export type GqlResolversTypes = ResolversObject<{
Trainee: ResolverTypeWrapper<Trainee>;
Trainer: ResolverTypeWrapper<Trainer>;
TrainerTraineePayload: ResolverTypeWrapper<Omit<GqlTrainerTraineePayload, 'trainee' | 'trainer'> & { trainee: GqlResolversTypes['Trainee'], trainer: GqlResolversTypes['Trainer'] }>;
UpdateAdminInput: GqlUpdateAdminInput;
UpdateCurrentTraineeInput: GqlUpdateCurrentTraineeInput;
UpdateReportPayload: ResolverTypeWrapper<Omit<GqlUpdateReportPayload, 'report' | 'trainee'> & { report: GqlResolversTypes['Report'], trainee: GqlResolversTypes['Trainee'] }>;
UpdateTraineeInput: GqlUpdateTraineeInput;
Expand All @@ -654,6 +682,7 @@ export type GqlResolversParentTypes = ResolversObject<{
Comment: Comment;
CommentableInterface: CommentableInterface;
Company: GqlCompany;
CreateAdminInput: GqlCreateAdminInput;
CreateCommentPayload: Omit<GqlCreateCommentPayload, 'comment' | 'commentable'> & { comment: GqlResolversParentTypes['Comment'], commentable: GqlResolversParentTypes['CommentableInterface'] };
CreateTraineeInput: GqlCreateTraineeInput;
CreateTrainerInput: GqlCreateTrainerInput;
Expand All @@ -675,6 +704,7 @@ export type GqlResolversParentTypes = ResolversObject<{
Trainee: Trainee;
Trainer: Trainer;
TrainerTraineePayload: Omit<GqlTrainerTraineePayload, 'trainee' | 'trainer'> & { trainee: GqlResolversParentTypes['Trainee'], trainer: GqlResolversParentTypes['Trainer'] };
UpdateAdminInput: GqlUpdateAdminInput;
UpdateCurrentTraineeInput: GqlUpdateCurrentTraineeInput;
UpdateReportPayload: Omit<GqlUpdateReportPayload, 'report' | 'trainee'> & { report: GqlResolversParentTypes['Report'], trainee: GqlResolversParentTypes['Trainee'] };
UpdateTraineeInput: GqlUpdateTraineeInput;
Expand All @@ -686,6 +716,7 @@ export type GqlResolversParentTypes = ResolversObject<{
export type GqlAdminResolvers<ContextType = Context, ParentType extends GqlResolversParentTypes['Admin'] = GqlResolversParentTypes['Admin']> = ResolversObject<{
alexaSkillLinked?: Resolver<Maybe<GqlResolversTypes['Boolean']>, ParentType, ContextType>;
createdAt?: Resolver<GqlResolversTypes['String'], ParentType, ContextType>;
deleteAt?: Resolver<Maybe<GqlResolversTypes['String']>, ParentType, ContextType>;
email?: Resolver<GqlResolversTypes['String'], ParentType, ContextType>;
firstName?: Resolver<GqlResolversTypes['String'], ParentType, ContextType>;
id?: Resolver<GqlResolversTypes['ID'], ParentType, ContextType>;
Expand All @@ -695,7 +726,6 @@ export type GqlAdminResolvers<ContextType = Context, ParentType extends GqlResol
signature?: Resolver<Maybe<GqlResolversTypes['String']>, ParentType, ContextType>;
theme?: Resolver<Maybe<GqlResolversTypes['String']>, ParentType, ContextType>;
type?: Resolver<GqlResolversTypes['UserTypeEnum'], ParentType, ContextType>;
username?: Resolver<GqlResolversTypes['String'], ParentType, ContextType>;
__isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
}>;

Expand Down Expand Up @@ -774,6 +804,7 @@ export type GqlMutationResolvers<ContextType = Context, ParentType extends GqlRe
_devloginuser?: Resolver<Maybe<GqlResolversTypes['OAuthPayload']>, ParentType, ContextType, RequireFields<GqlMutation_DevloginuserArgs, 'id'>>;
_devsetusertype?: Resolver<GqlResolversTypes['DevSetUserPayload'], ParentType, ContextType, RequireFields<GqlMutation_DevsetusertypeArgs, 'type'>>;
claimTrainee?: Resolver<Maybe<GqlResolversTypes['TrainerTraineePayload']>, ParentType, ContextType, RequireFields<GqlMutationClaimTraineeArgs, 'id'>>;
createAdmin?: Resolver<Maybe<GqlResolversTypes['Admin']>, ParentType, ContextType, RequireFields<GqlMutationCreateAdminArgs, 'input'>>;
createCommentOnDay?: Resolver<GqlResolversTypes['CreateCommentPayload'], ParentType, ContextType, RequireFields<GqlMutationCreateCommentOnDayArgs, 'id' | 'text' | 'traineeId'>>;
createCommentOnEntry?: Resolver<GqlResolversTypes['CreateCommentPayload'], ParentType, ContextType, RequireFields<GqlMutationCreateCommentOnEntryArgs, 'id' | 'text' | 'traineeId'>>;
createCommentOnReport?: Resolver<GqlResolversTypes['CreateCommentPayload'], ParentType, ContextType, RequireFields<GqlMutationCreateCommentOnReportArgs, 'id' | 'text' | 'traineeId'>>;
Expand All @@ -789,6 +820,7 @@ export type GqlMutationResolvers<ContextType = Context, ParentType extends GqlRe
unclaimTrainee?: Resolver<Maybe<GqlResolversTypes['TrainerTraineePayload']>, ParentType, ContextType, RequireFields<GqlMutationUnclaimTraineeArgs, 'id'>>;
unlinkAlexa?: Resolver<Maybe<GqlResolversTypes['UserInterface']>, ParentType, ContextType>;
unmarkUserForDeletion?: Resolver<Maybe<GqlResolversTypes['UserInterface']>, ParentType, ContextType, RequireFields<GqlMutationUnmarkUserForDeletionArgs, 'id'>>;
updateAdmin?: Resolver<Maybe<GqlResolversTypes['Admin']>, ParentType, ContextType, RequireFields<GqlMutationUpdateAdminArgs, 'id' | 'input'>>;
updateCurrentTrainee?: Resolver<Maybe<GqlResolversTypes['Trainee']>, ParentType, ContextType, RequireFields<GqlMutationUpdateCurrentTraineeArgs, 'input'>>;
updateCurrentUser?: Resolver<Maybe<GqlResolversTypes['UserInterface']>, ParentType, ContextType, Partial<GqlMutationUpdateCurrentUserArgs>>;
updateDay?: Resolver<Maybe<GqlResolversTypes['Day']>, ParentType, ContextType, RequireFields<GqlMutationUpdateDayArgs, 'id'>>;
Expand All @@ -812,6 +844,7 @@ export type GqlPrintPayloadResolvers<ContextType = Context, ParentType extends G
}>;

export type GqlQueryResolvers<ContextType = Context, ParentType extends GqlResolversParentTypes['Query'] = GqlResolversParentTypes['Query']> = ResolversObject<{
admins?: Resolver<Array<GqlResolversTypes['Admin']>, ParentType, ContextType>;
alexaLinkingUrl?: Resolver<Maybe<GqlResolversTypes['String']>, ParentType, ContextType>;
cleanup?: Resolver<GqlResolversTypes['Boolean'], ParentType, ContextType>;
companies?: Resolver<Maybe<Array<GqlResolversTypes['Company']>>, ParentType, ContextType>;
Expand Down Expand Up @@ -871,7 +904,6 @@ export type GqlTraineeResolvers<ContextType = Context, ParentType extends GqlRes
theme?: Resolver<Maybe<GqlResolversTypes['String']>, ParentType, ContextType>;
trainer?: Resolver<Maybe<GqlResolversTypes['Trainer']>, ParentType, ContextType>;
type?: Resolver<GqlResolversTypes['UserTypeEnum'], ParentType, ContextType>;
username?: Resolver<GqlResolversTypes['String'], ParentType, ContextType>;
__isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
}>;

Expand All @@ -889,7 +921,6 @@ export type GqlTrainerResolvers<ContextType = Context, ParentType extends GqlRes
theme?: Resolver<Maybe<GqlResolversTypes['String']>, ParentType, ContextType>;
trainees?: Resolver<Array<GqlResolversTypes['Trainee']>, ParentType, ContextType>;
type?: Resolver<GqlResolversTypes['UserTypeEnum'], ParentType, ContextType>;
username?: Resolver<GqlResolversTypes['String'], ParentType, ContextType>;
__isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
}>;

Expand Down Expand Up @@ -918,7 +949,6 @@ export type GqlUserInterfaceResolvers<ContextType = Context, ParentType extends
signature?: Resolver<Maybe<GqlResolversTypes['String']>, ParentType, ContextType>;
theme?: Resolver<Maybe<GqlResolversTypes['String']>, ParentType, ContextType>;
type?: Resolver<GqlResolversTypes['UserTypeEnum'], ParentType, ContextType>;
username?: Resolver<GqlResolversTypes['String'], ParentType, ContextType>;
}>;

export type GqlResolvers<ContextType = Context> = ResolversObject<{
Expand Down
2 changes: 1 addition & 1 deletion packages/api/src/models.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ export type User = Trainee | Trainer | Admin
* during the runtime in the backend. Only after beeing
* transformed by GraphQL these fields are available
*/
type ResolvedUserFields = 'username' | 'alexaSkillLinked'
type ResolvedUserFields = 'alexaSkillLinked'

export type UserInterface = Omit<GqlUserInterface, ResolvedUserFields> & {
email: string
Expand Down
2 changes: 2 additions & 0 deletions packages/backend/src/i18n/de.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@ export const GermanTranslations: Translations = {
wrongUserType: 'Du besitzt den falschen Nutzer Typen um dies zu tun',
reportIncomplete: 'Der Bericht ist nicht vollständig',
missingPeriod: 'Die Ausbildungsperiode fehlt',
cantDeleteYourself: 'Ein Admin kann sich nicht selber für die Löschung markieren',
cantChangeOwnEmail: 'Ein Admin kann seine eigene E-Mail Adresse nicht ändern',
},
email: {
hello: 'Hallo',
Expand Down
2 changes: 2 additions & 0 deletions packages/backend/src/i18n/en.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@ export const EnglishTranslations: Translations = {
wrongUserType: 'You have the wrong user type',
reportIncomplete: 'Report is incomplete',
missingPeriod: 'Missing period',
cantDeleteYourself: "An Admin can't mark themselves for deletion",
cantChangeOwnEmail: "An Admin can't change their own e-mail address",
},
email: {
hello: 'Hello',
Expand Down
2 changes: 2 additions & 0 deletions packages/backend/src/i18n/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@ export type Translations = {
wrongUserType: string
reportIncomplete: string
missingPeriod: string
cantDeleteYourself: string
cantChangeOwnEmail: string
}
email: EmailTranslations
print: PrintTranslations
Expand Down
1 change: 1 addition & 0 deletions packages/backend/src/permissions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ export const permissions = shield<unknown, Context>(
// Admin Queris
getUser: and(authenticated, admin),
trainers: and(authenticated, admin),
admins: and(authenticated, admin),
},
Mutation: {
_devsetusertype: and(authenticated, debug),
Expand Down
Loading