cleaning bunch of models, services, and routes for new line stuff
This commit is contained in:
@@ -1,150 +0,0 @@
|
||||
import {
|
||||
Conversation,
|
||||
ConversationMember,
|
||||
ConversationMemberState,
|
||||
} from "../../core/models/conversation.model";
|
||||
import { JwtClaims, authCheck } from "../middleware/auth";
|
||||
import express, { Application, Request, Response } from "express";
|
||||
|
||||
import Content from "@nirvana/core/models/content.model";
|
||||
import { ConversationService } from "../services/conversation.service";
|
||||
import CreateLineRequest from "../../core/requests/createLine.request";
|
||||
import GetConversationDetailsResponse from "@nirvana/core/responses/getConversationDetails.response";
|
||||
import GetDmConversationByOtherUserIdResponse from "../../core/responses/getDmConversationByOtherUserId.response";
|
||||
import GetUserConversationsResponse from "../../core/responses/getUserConversations.response";
|
||||
import MasterConversation from "../../core/models/masterConversation.model";
|
||||
import { ObjectId } from "mongodb";
|
||||
import Relationship from "@nirvana/core/models/relationship.model";
|
||||
import { UserService } from "../services/user.service";
|
||||
import { collections } from "../services/database.service";
|
||||
|
||||
export default function getConversationRoutes() {
|
||||
const router = express.Router();
|
||||
|
||||
router.use(express.json());
|
||||
|
||||
// get data for a one on one conversation
|
||||
// router.get("/:otherUserGoogleUserId", authCheck, getConversationDetails);
|
||||
|
||||
// create a convo
|
||||
router.post("/", authCheck, createConversation);
|
||||
|
||||
// get all of user's convos
|
||||
router.get("/", authCheck, getUserConvos);
|
||||
|
||||
// get conversation between user and other user
|
||||
router.get("/dm/:otherUserId", authCheck, getDmByOtherUserId);
|
||||
|
||||
return router;
|
||||
}
|
||||
|
||||
async function getDmByOtherUserId(req: Request, res: Response) {
|
||||
try {
|
||||
const { otherUserId } = req.params;
|
||||
const userInfo = res.locals.userInfo as JwtClaims;
|
||||
|
||||
console.log(otherUserId);
|
||||
|
||||
// check db for convos between me and this other person
|
||||
// if there is one, then return it with 200 status
|
||||
// else return it with custom status that frontend will read
|
||||
|
||||
res.status(200).json();
|
||||
return;
|
||||
|
||||
res.status(205).json("no such conversation between you two");
|
||||
} catch (error) {
|
||||
res.status(500).json(error);
|
||||
}
|
||||
}
|
||||
|
||||
async function createConversation(req: Request, res: Response) {
|
||||
try {
|
||||
const reqObj: CreateLineRequest = req.body as CreateLineRequest;
|
||||
console.log(req.body);
|
||||
|
||||
if (!reqObj?.otherMemberIds.length) {
|
||||
res.status(400).json("must provide member Ids");
|
||||
return;
|
||||
}
|
||||
|
||||
const userInfo = res.locals.userInfo as JwtClaims;
|
||||
|
||||
const newConvo = new Conversation(new ObjectId());
|
||||
const convoMembers: ConversationMember[] =
|
||||
reqObj.otherMemberIds.map((memId) => {
|
||||
const newConvoMember = new ConversationMember(
|
||||
newConvo._id!,
|
||||
new ObjectId(memId),
|
||||
ConversationMemberState.INVITED
|
||||
);
|
||||
|
||||
return newConvoMember;
|
||||
}) ?? [];
|
||||
|
||||
convoMembers.push(
|
||||
new ConversationMember(
|
||||
newConvo._id!,
|
||||
new ObjectId(userInfo.userId),
|
||||
ConversationMemberState.INBOX
|
||||
)
|
||||
);
|
||||
|
||||
const transactionResult = await ConversationService.createConversation(
|
||||
newConvo,
|
||||
convoMembers
|
||||
);
|
||||
|
||||
transactionResult
|
||||
? res.status(200).json(newConvo)
|
||||
: res.status(400).json("unable to create convo");
|
||||
} catch (error) {
|
||||
console.log(error);
|
||||
res.status(500).json(error);
|
||||
}
|
||||
}
|
||||
|
||||
async function getUserConvos(req: Request, res: Response) {
|
||||
try {
|
||||
const userInfo = res.locals.userInfo as JwtClaims;
|
||||
|
||||
// get all of user's convoMember entries
|
||||
const convoMembers =
|
||||
await ConversationService.getConversationsMembersByUserId(
|
||||
userInfo.userId
|
||||
);
|
||||
|
||||
if (!convoMembers?.length) {
|
||||
res.status(400).json();
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
const convoIds =
|
||||
convoMembers?.map((convoMem) => convoMem.conversationId) ?? [];
|
||||
|
||||
// get all convos from the list of relevant convos
|
||||
const convos =
|
||||
(await ConversationService.getConversationsByIds(convoIds)) ?? [];
|
||||
|
||||
const masterConvos =
|
||||
convos.map((convo) => {
|
||||
const assocConvoMember = convoMembers.find((convMem) =>
|
||||
convMem.conversationId.equals(convo._id!)
|
||||
);
|
||||
|
||||
return new MasterConversation(
|
||||
convo._id!,
|
||||
convo.createdDate,
|
||||
convo.lastUpdatedDate,
|
||||
assocConvoMember
|
||||
);
|
||||
}) ?? [];
|
||||
|
||||
const resObj = new GetUserConversationsResponse(convos);
|
||||
|
||||
res.json(masterConvos);
|
||||
} catch (error) {
|
||||
res.status(500).json(error);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,151 @@
|
||||
import { JwtClaims, authCheck } from "../middleware/auth";
|
||||
import {
|
||||
Line,
|
||||
LineMember,
|
||||
LineMemberState,
|
||||
} from "@nirvana/core/models/line.model";
|
||||
import express, { Application, Request, Response } from "express";
|
||||
|
||||
import Content from "@nirvana/core/models/content.model";
|
||||
import CreateLineRequest from "@nirvana/core/requests/createLine.request";
|
||||
import GetConversationDetailsResponse from "@nirvana/core/responses/getConversationDetails.response";
|
||||
import GetDmConversationByOtherUserIdResponse from "@nirvana/core/responses/getDmConversationByOtherUserId.response";
|
||||
import GetUserLinesResponse from "@nirvana/core/responses/getUserLines.response";
|
||||
import { LineService } from "../services/line.service";
|
||||
import MasterLineData from "@nirvana/core/models/masterLineData.model";
|
||||
import { ObjectId } from "mongodb";
|
||||
import Relationship from "@nirvana/core/models/relationship.model";
|
||||
import { UserService } from "../services/user.service";
|
||||
import { collections } from "../services/database.service";
|
||||
|
||||
export default function getLineRoutes() {
|
||||
const router = express.Router();
|
||||
|
||||
router.use(express.json());
|
||||
|
||||
// get data for a one on one conversation
|
||||
// router.get("/:otherUserGoogleUserId", authCheck, getConversationDetails);
|
||||
|
||||
// create a line
|
||||
router.post("/", authCheck, createLine);
|
||||
|
||||
// get all of user's lines
|
||||
router.get("/", authCheck, getUserLines);
|
||||
|
||||
// get conversation between user and other user
|
||||
router.get("/dm/:otherUserId", authCheck, getDmByOtherUserId);
|
||||
|
||||
return router;
|
||||
}
|
||||
|
||||
async function getDmByOtherUserId(req: Request, res: Response) {
|
||||
try {
|
||||
const { otherUserId } = req.params;
|
||||
const userInfo = res.locals.userInfo as JwtClaims;
|
||||
|
||||
console.log(otherUserId);
|
||||
|
||||
// check db for lines between me and this other person
|
||||
// if there is one, then return it with 200 status
|
||||
// else return it with custom status that frontend will read
|
||||
|
||||
res.status(200).json();
|
||||
return;
|
||||
|
||||
res.status(205).json("no such conversation between you two");
|
||||
} catch (error) {
|
||||
res.status(500).json(error);
|
||||
}
|
||||
}
|
||||
|
||||
async function createLine(req: Request, res: Response) {
|
||||
try {
|
||||
const reqObj: CreateLineRequest = req.body as CreateLineRequest;
|
||||
console.log(req.body);
|
||||
|
||||
if (!reqObj?.otherMemberIds.length) {
|
||||
res.status(400).json("must provide member Ids");
|
||||
return;
|
||||
}
|
||||
|
||||
const userInfo = res.locals.userInfo as JwtClaims;
|
||||
|
||||
const newLine = new Line(new ObjectId(), new Date());
|
||||
const lineMembers: LineMember[] =
|
||||
reqObj.otherMemberIds.map((memId) => {
|
||||
const newLineMember = new LineMember(
|
||||
newLine._id!,
|
||||
new ObjectId(memId),
|
||||
LineMemberState.INBOX
|
||||
);
|
||||
|
||||
return newLineMember;
|
||||
}) ?? [];
|
||||
|
||||
lineMembers.push(
|
||||
new LineMember(
|
||||
newLine._id!,
|
||||
new ObjectId(userInfo.userId),
|
||||
LineMemberState.INBOX
|
||||
)
|
||||
);
|
||||
|
||||
const transactionResult = await LineService.createLine(
|
||||
newLine,
|
||||
lineMembers
|
||||
);
|
||||
|
||||
transactionResult
|
||||
? res.status(200).json(newLine)
|
||||
: res.status(400).json("unable to create line");
|
||||
} catch (error) {
|
||||
console.log(error);
|
||||
res.status(500).json(error);
|
||||
}
|
||||
}
|
||||
|
||||
async function getUserLines(req: Request, res: Response) {
|
||||
try {
|
||||
const userInfo = res.locals.userInfo as JwtClaims;
|
||||
|
||||
// get all of user's lineMember entries
|
||||
const lineMembers = await LineService.getLineMembersByUserId(
|
||||
userInfo.userId
|
||||
);
|
||||
|
||||
if (!lineMembers?.length) {
|
||||
res.status(400).json();
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
const lineIds = lineMembers?.map((lineMem) => lineMem.lineId) ?? [];
|
||||
|
||||
// get all lines from the list of relevant lines
|
||||
const lines = (await LineService.getLinesByIds(lineIds)) ?? [];
|
||||
|
||||
const masterLines =
|
||||
lines.map((currentLine) => {
|
||||
const associatedLineMember = lineMembers.find((lineMember) =>
|
||||
lineMember.lineId.equals(currentLine._id!)
|
||||
);
|
||||
|
||||
// TODO: get all of the other members on the line
|
||||
|
||||
// TODO: get the latest audio blocks for this line...maybe like today and yesterday or by block count
|
||||
|
||||
return new MasterLineData(
|
||||
currentLine._id!,
|
||||
currentLine.createdDate,
|
||||
currentLine.lastUpdatedDate,
|
||||
associatedLineMember
|
||||
);
|
||||
}) ?? [];
|
||||
|
||||
const resObj = new GetUserLinesResponse(lines);
|
||||
|
||||
res.json(masterLines);
|
||||
} catch (error) {
|
||||
res.status(500).json(error);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user