Skip to content

Commit 33b9c05

Browse files
committed
feat(graphql): add email confirmation mutations and response types
1 parent 4ca3a2c commit 33b9c05

File tree

4 files changed

+16337
-13208
lines changed

4 files changed

+16337
-13208
lines changed

frontend/src/components/root/prompt-form.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ export const PromptForm = forwardRef<PromptFormRef, PromptFormProps>(
164164
</div>
165165

166166
{/* Controls section - now separated with a background */}
167-
<div className="absolute bottom-0 left-0 right-0 py-3 px-3 flex justify-between items-center rounded-b-lg border-gray-100 dark:border-gray-600">
167+
<div className="absolute bottom-0 left-0 right-0 pb-3 px-3 flex pt-1 justify-between items-center bg-white dark:bg-gray-600 rounded-b-lg dark:border-gray-600">
168168
<div className="flex items-center gap-2">
169169
<Select
170170
value={visibility}

frontend/src/graphql/schema.gql

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,11 @@ input CreateProjectInput {
5757
"""Date custom scalar type"""
5858
scalar Date
5959

60+
type EmailConfirmationResponse {
61+
message: String!
62+
success: Boolean
63+
}
64+
6065
input FetchPublicProjectsInputs {
6166
size: Float!
6267
strategy: String!
@@ -101,6 +106,7 @@ type Message {
101106

102107
type Mutation {
103108
clearChatHistory(chatId: String!): Boolean!
109+
confirmEmail(token: String!): EmailConfirmationResponse!
104110
createChat(newChatInput: NewChatInput!): Chat!
105111
createProject(createProjectInput: CreateProjectInput!): Chat!
106112
deleteChat(chatId: String!): Boolean!
@@ -110,6 +116,7 @@ type Mutation {
110116
refreshToken(refreshToken: String!): RefreshTokenResponse!
111117
regenerateDescription(input: String!): String!
112118
registerUser(input: RegisterUserInput!): User!
119+
resendConfirmationEmail(input: ResendEmailInput!): EmailConfirmationResponse!
113120
subscribeToProject(projectId: ID!): Project!
114121
triggerChatStream(input: ChatInputType!): Boolean!
115122
updateChatTitle(updateChatTitleInput: UpdateChatTitleInput!): Chat
@@ -137,9 +144,7 @@ type Project {
137144
projectPath: String!
138145
subNumber: Float!
139146

140-
"""
141-
Projects that are copies of this project
142-
"""
147+
"""Projects that are copies of this project"""
143148
subscribers: [Project!]
144149
uniqueProjectId: String!
145150
updatedAt: Date!
@@ -171,6 +176,7 @@ type Query {
171176
getChatHistory(chatId: String!): [Message!]!
172177
getHello: String!
173178
getProject(projectId: String!): Project!
179+
getRemainingProjectLimit: Int!
174180
getSubscribedProjects: [Project!]!
175181
getUserChats: [Chat!]
176182
getUserProjects: [Project!]!
@@ -190,6 +196,10 @@ input RegisterUserInput {
190196
username: String!
191197
}
192198

199+
input ResendEmailInput {
200+
email: String!
201+
}
202+
193203
enum Role {
194204
Assistant
195205
System
@@ -225,9 +235,10 @@ type User {
225235
id: ID!
226236
isActive: Boolean!
227237
isDeleted: Boolean!
238+
isEmailConfirmed: Boolean!
239+
lastEmailSendTime: Date!
228240
projects: [Project!]!
229-
subscribedProjects: [Project!]
230-
@deprecated(reason: "Use projects with forkedFromId instead")
241+
subscribedProjects: [Project!] @deprecated(reason: "Use projects with forkedFromId instead")
231242
updatedAt: Date!
232243
username: String!
233244
}

frontend/src/graphql/type.tsx

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,12 @@ export type CreateProjectInput = {
9696
public?: InputMaybe<Scalars['Boolean']['input']>;
9797
};
9898

99+
export type EmailConfirmationResponse = {
100+
__typename: 'EmailConfirmationResponse';
101+
message: Scalars['String']['output'];
102+
success?: Maybe<Scalars['Boolean']['output']>;
103+
};
104+
99105
export type FetchPublicProjectsInputs = {
100106
size: Scalars['Float']['input'];
101107
strategy: Scalars['String']['input'];
@@ -144,6 +150,7 @@ export type Message = {
144150
export type Mutation = {
145151
__typename: 'Mutation';
146152
clearChatHistory: Scalars['Boolean']['output'];
153+
confirmEmail: EmailConfirmationResponse;
147154
createChat: Chat;
148155
createProject: Chat;
149156
deleteChat: Scalars['Boolean']['output'];
@@ -153,6 +160,7 @@ export type Mutation = {
153160
refreshToken: RefreshTokenResponse;
154161
regenerateDescription: Scalars['String']['output'];
155162
registerUser: User;
163+
resendConfirmationEmail: EmailConfirmationResponse;
156164
subscribeToProject: Project;
157165
triggerChatStream: Scalars['Boolean']['output'];
158166
updateChatTitle?: Maybe<Chat>;
@@ -164,6 +172,10 @@ export type MutationClearChatHistoryArgs = {
164172
chatId: Scalars['String']['input'];
165173
};
166174

175+
export type MutationConfirmEmailArgs = {
176+
token: Scalars['String']['input'];
177+
};
178+
167179
export type MutationCreateChatArgs = {
168180
newChatInput: NewChatInput;
169181
};
@@ -200,6 +212,10 @@ export type MutationRegisterUserArgs = {
200212
input: RegisterUserInput;
201213
};
202214

215+
export type MutationResendConfirmationEmailArgs = {
216+
input: ResendEmailInput;
217+
};
218+
203219
export type MutationSubscribeToProjectArgs = {
204220
projectId: Scalars['ID']['input'];
205221
};
@@ -275,6 +291,7 @@ export type Query = {
275291
getChatHistory: Array<Message>;
276292
getHello: Scalars['String']['output'];
277293
getProject: Project;
294+
getRemainingProjectLimit: Scalars['Int']['output'];
278295
getSubscribedProjects: Array<Project>;
279296
getUserChats?: Maybe<Array<Chat>>;
280297
getUserProjects: Array<Project>;
@@ -319,6 +336,10 @@ export type RegisterUserInput = {
319336
username: Scalars['String']['input'];
320337
};
321338

339+
export type ResendEmailInput = {
340+
email: Scalars['String']['input'];
341+
};
342+
322343
export type Role = 'Assistant' | 'System' | 'User';
323344

324345
export type StreamStatus = 'DONE' | 'STREAMING';
@@ -350,6 +371,8 @@ export type User = {
350371
id: Scalars['ID']['output'];
351372
isActive: Scalars['Boolean']['output'];
352373
isDeleted: Scalars['Boolean']['output'];
374+
isEmailConfirmed: Scalars['Boolean']['output'];
375+
lastEmailSendTime: Scalars['Date']['output'];
353376
projects: Array<Project>;
354377
/** @deprecated Use projects with forkedFromId instead */
355378
subscribedProjects?: Maybe<Array<Project>>;
@@ -476,9 +499,11 @@ export type ResolversTypes = ResolversObject<{
476499
CheckTokenInput: CheckTokenInput;
477500
CreateProjectInput: CreateProjectInput;
478501
Date: ResolverTypeWrapper<Scalars['Date']['output']>;
502+
EmailConfirmationResponse: ResolverTypeWrapper<EmailConfirmationResponse>;
479503
FetchPublicProjectsInputs: FetchPublicProjectsInputs;
480504
Float: ResolverTypeWrapper<Scalars['Float']['output']>;
481505
ID: ResolverTypeWrapper<Scalars['ID']['output']>;
506+
Int: ResolverTypeWrapper<Scalars['Int']['output']>;
482507
IsValidProjectInput: IsValidProjectInput;
483508
LoginResponse: ResolverTypeWrapper<LoginResponse>;
484509
LoginUserInput: LoginUserInput;
@@ -492,6 +517,7 @@ export type ResolversTypes = ResolversObject<{
492517
Query: ResolverTypeWrapper<{}>;
493518
RefreshTokenResponse: ResolverTypeWrapper<RefreshTokenResponse>;
494519
RegisterUserInput: RegisterUserInput;
520+
ResendEmailInput: ResendEmailInput;
495521
Role: Role;
496522
StreamStatus: StreamStatus;
497523
String: ResolverTypeWrapper<Scalars['String']['output']>;
@@ -513,9 +539,11 @@ export type ResolversParentTypes = ResolversObject<{
513539
CheckTokenInput: CheckTokenInput;
514540
CreateProjectInput: CreateProjectInput;
515541
Date: Scalars['Date']['output'];
542+
EmailConfirmationResponse: EmailConfirmationResponse;
516543
FetchPublicProjectsInputs: FetchPublicProjectsInputs;
517544
Float: Scalars['Float']['output'];
518545
ID: Scalars['ID']['output'];
546+
Int: Scalars['Int']['output'];
519547
IsValidProjectInput: IsValidProjectInput;
520548
LoginResponse: LoginResponse;
521549
LoginUserInput: LoginUserInput;
@@ -529,6 +557,7 @@ export type ResolversParentTypes = ResolversObject<{
529557
Query: {};
530558
RefreshTokenResponse: RefreshTokenResponse;
531559
RegisterUserInput: RegisterUserInput;
560+
ResendEmailInput: ResendEmailInput;
532561
String: Scalars['String']['output'];
533562
Subscription: {};
534563
UpdateChatTitleInput: UpdateChatTitleInput;
@@ -615,6 +644,16 @@ export interface DateScalarConfig
615644
name: 'Date';
616645
}
617646

647+
export type EmailConfirmationResponseResolvers<
648+
ContextType = any,
649+
ParentType extends
650+
ResolversParentTypes['EmailConfirmationResponse'] = ResolversParentTypes['EmailConfirmationResponse'],
651+
> = ResolversObject<{
652+
message?: Resolver<ResolversTypes['String'], ParentType, ContextType>;
653+
success?: Resolver<Maybe<ResolversTypes['Boolean']>, ParentType, ContextType>;
654+
__isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
655+
}>;
656+
618657
export type LoginResponseResolvers<
619658
ContextType = any,
620659
ParentType extends
@@ -668,6 +707,12 @@ export type MutationResolvers<
668707
ContextType,
669708
RequireFields<MutationClearChatHistoryArgs, 'chatId'>
670709
>;
710+
confirmEmail?: Resolver<
711+
ResolversTypes['EmailConfirmationResponse'],
712+
ParentType,
713+
ContextType,
714+
RequireFields<MutationConfirmEmailArgs, 'token'>
715+
>;
671716
createChat?: Resolver<
672717
ResolversTypes['Chat'],
673718
ParentType,
@@ -722,6 +767,12 @@ export type MutationResolvers<
722767
ContextType,
723768
RequireFields<MutationRegisterUserArgs, 'input'>
724769
>;
770+
resendConfirmationEmail?: Resolver<
771+
ResolversTypes['EmailConfirmationResponse'],
772+
ParentType,
773+
ContextType,
774+
RequireFields<MutationResendConfirmationEmailArgs, 'input'>
775+
>;
725776
subscribeToProject?: Resolver<
726777
ResolversTypes['Project'],
727778
ParentType,
@@ -861,6 +912,11 @@ export type QueryResolvers<
861912
ContextType,
862913
RequireFields<QueryGetProjectArgs, 'projectId'>
863914
>;
915+
getRemainingProjectLimit?: Resolver<
916+
ResolversTypes['Int'],
917+
ParentType,
918+
ContextType
919+
>;
864920
getSubscribedProjects?: Resolver<
865921
Array<ResolversTypes['Project']>,
866922
ParentType,
@@ -926,6 +982,12 @@ export type UserResolvers<
926982
id?: Resolver<ResolversTypes['ID'], ParentType, ContextType>;
927983
isActive?: Resolver<ResolversTypes['Boolean'], ParentType, ContextType>;
928984
isDeleted?: Resolver<ResolversTypes['Boolean'], ParentType, ContextType>;
985+
isEmailConfirmed?: Resolver<
986+
ResolversTypes['Boolean'],
987+
ParentType,
988+
ContextType
989+
>;
990+
lastEmailSendTime?: Resolver<ResolversTypes['Date'], ParentType, ContextType>;
929991
projects?: Resolver<
930992
Array<ResolversTypes['Project']>,
931993
ParentType,
@@ -947,6 +1009,7 @@ export type Resolvers<ContextType = any> = ResolversObject<{
9471009
ChatCompletionChunkType?: ChatCompletionChunkTypeResolvers<ContextType>;
9481010
ChatCompletionDeltaType?: ChatCompletionDeltaTypeResolvers<ContextType>;
9491011
Date?: GraphQLScalarType;
1012+
EmailConfirmationResponse?: EmailConfirmationResponseResolvers<ContextType>;
9501013
LoginResponse?: LoginResponseResolvers<ContextType>;
9511014
Menu?: MenuResolvers<ContextType>;
9521015
Message?: MessageResolvers<ContextType>;

0 commit comments

Comments
 (0)