whole create flow with error handling and such
This commit is contained in:
@@ -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));
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user