whole create flow with error handling and such

This commit is contained in:
talksik
2022-06-11 09:45:47 -05:00
parent 3342654431
commit e39316eeff
5 changed files with 21 additions and 10 deletions
+1 -1
View File
@@ -26,7 +26,7 @@ app.use('/api/conversations', getConversationRoutes());
app.use((err: Error, req: Request, res: Response, next: NextFunction) => { app.use((err: Error, req: Request, res: Response, next: NextFunction) => {
// use logger or sentry // use logger or sentry
if (!res.statusCode) res.status(500); if (res.statusCode === 200) res.status(500);
return res.json(new NirvanaResponse(undefined, err, err.message)); return res.json(new NirvanaResponse(undefined, err, err.message));
}); });
+5 -1
View File
@@ -11,6 +11,7 @@ import CreateConversationRequest from '@nirvana/core/requests/CreateConversation
import CreateConversationResponse from '@nirvana/core/responses/CreateConversationResponse.response'; import CreateConversationResponse from '@nirvana/core/responses/CreateConversationResponse.response';
import { MemberState } from '../../core/models/conversation.model'; import { MemberState } from '../../core/models/conversation.model';
import NirvanaResponse from '@nirvana/core/responses/nirvanaResponse'; import NirvanaResponse from '@nirvana/core/responses/nirvanaResponse';
import { ObjectId } from 'mongodb';
import { UserService } from '../services/user.service'; import { UserService } from '../services/user.service';
export default function getConversationRoutes() { export default function getConversationRoutes() {
@@ -38,7 +39,7 @@ const createConversation = async (req: Request, res: Response, next: NextFunctio
const createRequest = req.body as CreateConversationRequest; const createRequest = req.body as CreateConversationRequest;
const userInfo = res.locals.userInfo as JwtClaims; const userInfo = res.locals.userInfo as JwtClaims;
if (!createRequest.otherUsers) { if (!createRequest.otherUsers || createRequest.otherUsers.length === 0) {
return next(new Error('must provide who you want to talk to')); return next(new Error('must provide who you want to talk to'));
} }
@@ -49,6 +50,9 @@ const createConversation = async (req: Request, res: Response, next: NextFunctio
createRequest.otherUsers.forEach((userObject) => { createRequest.otherUsers.forEach((userObject) => {
const newConversationMember = new ConversationMember(MemberRole.regular, MemberState.inbox); const newConversationMember = new ConversationMember(MemberRole.regular, MemberState.inbox);
// ! hack as json over the wire converts to string for some reason
userObject._id = new ObjectId(userObject._id);
conversationUserMembers.push({ conversationUserMembers.push({
...userObject, ...userObject,
...newConversationMember, ...newConversationMember,
+7 -1
View File
@@ -6,7 +6,13 @@
// } // }
// | { data?: T; error: Error }; // | { data?: T; error: Error };
export default class NirvanaResponse<T> { export interface INirvanaResponse<T> {
data?: T;
error?: Error;
message?: string;
}
export default class NirvanaResponse<T> implements INirvanaResponse<T> {
data?: T; data?: T;
error?: Error; error?: Error;
message?: string; message?: string;
+7 -7
View File
@@ -1,9 +1,9 @@
import NirvanaResponse, { INirvanaResponse } from '@nirvana/core/responses/nirvanaResponse';
import axios, { AxiosRequestConfig, AxiosResponse, Method } from 'axios'; import axios, { AxiosRequestConfig, AxiosResponse, Method } from 'axios';
import CreateConversationRequest from '../../../core/requests/CreateConversationRequest.request'; import CreateConversationRequest from '@nirvana/core/requests/CreateConversationRequest.request';
import CreateConversationResponse from '../../../core/responses/CreateConversationResponse.response'; import CreateConversationResponse from '@nirvana/core/responses/CreateConversationResponse.response';
import LoginResponse from '@nirvana/core/responses/login.response'; import LoginResponse from '@nirvana/core/responses/login.response';
import NirvanaResponse from '../../../core/responses/nirvanaResponse';
import UserDetailsResponse from '@nirvana/core/responses/userDetails.response'; import UserDetailsResponse from '@nirvana/core/responses/userDetails.response';
import UserSearchResponse from '@nirvana/core/responses/userSearch.response'; import UserSearchResponse from '@nirvana/core/responses/userSearch.response';
@@ -38,13 +38,13 @@ export default class NirvanaApi {
res = await fetch(fullUrl); res = await fetch(fullUrl);
} }
if (!res.ok) { const resultJson = await res.json();
if (res.status === 401) throw new Error('You are not authorized here');
throw new Error('Something went wrong'); if (!res.ok) {
throw Error((resultJson as INirvanaResponse<string>).message);
} }
return (await res.json()) as T; return resultJson as T;
} }
} }
@@ -110,6 +110,7 @@ export default function NewConversationDialog() {
// todo: select conversation Id that was created // todo: select conversation Id that was created
} catch (error) { } catch (error) {
console.error(error); console.error(error);
toast.error(error.message);
} }
setIsSubmitting(false); setIsSubmitting(false);