From d013212054635bb5aa2a75baf035c94389426adc Mon Sep 17 00:00:00 2001 From: talksik Date: Thu, 5 May 2022 08:07:50 -0500 Subject: [PATCH] creating line scrappy works sort of --- packages/api/index.ts | 2 +- packages/api/routes/line.ts | 19 ++++++++++++++++--- packages/core/models/line.model.ts | 5 +++-- packages/core/responses/nirvanaResponse.ts | 17 +++++++++++++++++ packages/desktop/src/controller/index.tsx | 4 ++-- packages/desktop/src/controller/nirvanaApi.ts | 17 ++++++++--------- .../src/pages/terminal/newLine/index.tsx | 12 +++++++++--- 7 files changed, 56 insertions(+), 20 deletions(-) create mode 100644 packages/core/responses/nirvanaResponse.ts diff --git a/packages/api/index.ts b/packages/api/index.ts index 221214f..08286c9 100644 --- a/packages/api/index.ts +++ b/packages/api/index.ts @@ -28,7 +28,7 @@ app.get("/", (req: Request, res: Response) => { app.use("/api/user", getUserRoutes()); app.use("/api/search", getSearchRoutes()); -app.use("/api/conversations", getLineRoutes()); +app.use("/api/lines", getLineRoutes()); const PORT = 5000; var server = app.listen(PORT, () => console.log("express running")); diff --git a/packages/api/routes/line.ts b/packages/api/routes/line.ts index f658d22..d681012 100644 --- a/packages/api/routes/line.ts +++ b/packages/api/routes/line.ts @@ -13,6 +13,7 @@ import GetDmConversationByOtherUserIdResponse from "@nirvana/core/responses/getD import GetUserLinesResponse from "@nirvana/core/responses/getUserLines.response"; import { LineService } from "../services/line.service"; import MasterLineData from "@nirvana/core/models/masterLineData.model"; +import NirvanaResponse from "../../core/responses/nirvanaResponse"; import { ObjectId } from "mongodb"; import Relationship from "@nirvana/core/models/relationship.model"; import { UserService } from "../services/user.service"; @@ -70,7 +71,15 @@ async function createLine(req: Request, res: Response) { const userInfo = res.locals.userInfo as JwtClaims; - const newLine = new Line(new ObjectId(), new Date()); + const newLine = new Line( + new ObjectId(userInfo.userId), + reqObj.lineName, + new Date(), + new Date(), + new ObjectId() + ); + + // TODO: validate that users exists before creating line members const lineMembers: LineMember[] = reqObj.otherMemberIds.map((memId) => { const newLineMember = new LineMember( @@ -96,8 +105,12 @@ async function createLine(req: Request, res: Response) { ); transactionResult - ? res.status(200).json(newLine) - : res.status(400).json("unable to create line"); + ? res.status(200).json(new NirvanaResponse(newLine)) + : res + .status(400) + .json( + new NirvanaResponse(undefined, new Error("unable to create line")) + ); } catch (error) { console.log(error); res.status(500).json(error); diff --git a/packages/core/models/line.model.ts b/packages/core/models/line.model.ts index 8609a97..14cc8d2 100644 --- a/packages/core/models/line.model.ts +++ b/packages/core/models/line.model.ts @@ -2,10 +2,11 @@ import { ObjectId } from "mongodb"; export class Line { constructor( - public _id?: ObjectId, + public createdByUserId: ObjectId, + public name?: string, public createdDate: Date = new Date(), public lastUpdatedDate: Date = new Date(), - public name?: string + public _id?: ObjectId ) {} } diff --git a/packages/core/responses/nirvanaResponse.ts b/packages/core/responses/nirvanaResponse.ts new file mode 100644 index 0000000..a610d09 --- /dev/null +++ b/packages/core/responses/nirvanaResponse.ts @@ -0,0 +1,17 @@ +// TODO: enforce this or the other sort of thing for the class +// type INirvanaResponse = +// | { +// data: T; +// error?: Error; +// } +// | { data?: T; error: Error }; + +export default class NirvanaResponse { + data?: T; + error?: Error; + + constructor(_data: T, _error?: Error) { + this.data = _data; + this.error = _error; + } +} diff --git a/packages/desktop/src/controller/index.tsx b/packages/desktop/src/controller/index.tsx index f1437c8..981d3ff 100644 --- a/packages/desktop/src/controller/index.tsx +++ b/packages/desktop/src/controller/index.tsx @@ -48,6 +48,6 @@ export function useGetDmByUserId() { return useMutation(ApiCalls.getDmByUserId); } -export function useCreateConvo() { - return useMutation(ApiCalls.createConversation); +export function useCreateLine() { + return useMutation(ApiCalls.createLine); } diff --git a/packages/desktop/src/controller/nirvanaApi.ts b/packages/desktop/src/controller/nirvanaApi.ts index fb71b17..5b79905 100644 --- a/packages/desktop/src/controller/nirvanaApi.ts +++ b/packages/desktop/src/controller/nirvanaApi.ts @@ -4,6 +4,7 @@ import CreateLineRequest from "@nirvana/core/requests/createLine.request"; import { Line } from "@nirvana/core/models/line.model"; import LoginResponse from "../../../core/responses/login.response"; import MasterConversation from "@nirvana/core/models/masterLineData.model"; +import NirvanaResponse from "../../../core/responses/nirvanaResponse"; import { User } from "@nirvana/core/models"; import UserDetailsResponse from "../../../core/responses/userDetails.response"; import UserSearchResponse from "../../../core/responses/userSearch.response"; @@ -82,19 +83,17 @@ async function userSearch(searchQuery: string): Promise { } async function getUserConversations(): Promise { - return await NirvanaApi.fetch(`/conversations`, "GET", true); + return await NirvanaApi.fetch(`/lines`, "GET", true); } async function getDmByUserId(otherUserId: string): Promise { - return await NirvanaApi.fetch( - `/conversations/dm/${otherUserId}`, - "GET", - true - ); + return await NirvanaApi.fetch(`/lines/dm/${otherUserId}`, "GET", true); } -async function createConversation(request: CreateLineRequest): Promise { - return await NirvanaApi.fetch(`/conversations`, "POST", true, request); +async function createLine( + request: CreateLineRequest +): Promise> { + return await NirvanaApi.fetch(`/lines`, "POST", true, request); } export const ApiCalls = { @@ -104,5 +103,5 @@ export const ApiCalls = { userSearch, getUserConversations, getDmByUserId, - createConversation, + createLine, }; diff --git a/packages/desktop/src/pages/terminal/newLine/index.tsx b/packages/desktop/src/pages/terminal/newLine/index.tsx index 2ba3971..e85353a 100644 --- a/packages/desktop/src/pages/terminal/newLine/index.tsx +++ b/packages/desktop/src/pages/terminal/newLine/index.tsx @@ -1,7 +1,7 @@ import { Avatar, Modal } from "antd"; import { HotKeys, KeyMap } from "react-hotkeys"; import { useCallback, useEffect, useState } from "react"; -import { useCreateConvo, useUserSearch } from "../../../controller/index"; +import { useCreateLine, useUserSearch } from "../../../controller/index"; import BasicUserRow from "../../../components/User/basicUserDetailsRow"; import { FiSearch } from "react-icons/fi"; @@ -23,7 +23,7 @@ export default function NewLineModal({ const [searchQuery, setSearchQuery] = useState(""); const { refetch, data: searchRes } = useUserSearch(searchQuery); - const { mutateAsync, isError, isLoading } = useCreateConvo(); + const { mutateAsync, isLoading } = useCreateLine(); const [lineName, setLineName] = useState(""); @@ -71,6 +71,7 @@ export default function NewLineModal({ ); const handleSubmit = useCallback(async () => { + // TODO: prevent creating one-on-one line if already exists with x person? // ensure that we don't have a one on one chat already with x person if it's one person selected // upon success, @@ -89,7 +90,12 @@ export default function NewLineModal({ selectedPerson._id.toString() ); - await mutateAsync({ lineName, otherMemberIds: selectedMemberIds }); + const res = await mutateAsync({ + lineName, + otherMemberIds: selectedMemberIds, + }); + + toast.success("created line!"); // handle close once the new line is created handleClose();