2025-05-07 20:14:21 -07:00
|
|
|
import { toOid } from "@/src/helpers/inventoryHelpers";
|
|
|
|
import { Friendship } from "@/src/models/friendModel";
|
|
|
|
import { addAccountDataToFriendInfo, addInventoryDataToFriendInfo } from "@/src/services/friendService";
|
|
|
|
import { getAccountIdForRequest } from "@/src/services/loginService";
|
|
|
|
import { IFriendInfo } from "@/src/types/friendTypes";
|
|
|
|
import { Request, RequestHandler, Response } from "express";
|
2023-05-19 15:22:48 -03:00
|
|
|
|
2025-03-19 20:38:14 +01:00
|
|
|
// POST with {} instead of GET as of 38.5.0
|
2025-05-07 20:14:21 -07:00
|
|
|
export const getFriendsController: RequestHandler = async (req: Request, res: Response) => {
|
|
|
|
const accountId = await getAccountIdForRequest(req);
|
|
|
|
const response: IGetFriendsResponse = {
|
|
|
|
Current: [],
|
|
|
|
IncomingFriendRequests: [],
|
|
|
|
OutgoingFriendRequests: []
|
|
|
|
};
|
|
|
|
const [internalFriendships, externalFriendships] = await Promise.all([
|
|
|
|
Friendship.find({ owner: accountId }),
|
|
|
|
Friendship.find({ friend: accountId }, "owner Note")
|
|
|
|
]);
|
|
|
|
for (const externalFriendship of externalFriendships) {
|
|
|
|
if (!internalFriendships.find(x => x.friend.equals(externalFriendship.owner))) {
|
|
|
|
response.IncomingFriendRequests.push({
|
|
|
|
_id: toOid(externalFriendship.owner),
|
|
|
|
Note: externalFriendship.Note
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
for (const internalFriendship of internalFriendships) {
|
|
|
|
const friendInfo: IFriendInfo = {
|
|
|
|
_id: toOid(internalFriendship.friend)
|
|
|
|
};
|
|
|
|
if (externalFriendships.find(x => x.owner.equals(internalFriendship.friend))) {
|
|
|
|
response.Current.push(friendInfo);
|
|
|
|
} else {
|
|
|
|
response.OutgoingFriendRequests.push(friendInfo);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
const promises: Promise<void>[] = [];
|
|
|
|
for (const arr of Object.values(response)) {
|
|
|
|
for (const friendInfo of arr) {
|
|
|
|
promises.push(addAccountDataToFriendInfo(friendInfo));
|
|
|
|
promises.push(addInventoryDataToFriendInfo(friendInfo));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
await Promise.all(promises);
|
|
|
|
res.json(response);
|
2023-05-19 15:22:48 -03:00
|
|
|
};
|
2023-06-02 00:20:49 -03:00
|
|
|
|
2025-05-07 20:14:21 -07:00
|
|
|
// interface IGetFriendsResponse {
|
|
|
|
// Current: IFriendInfo[];
|
|
|
|
// IncomingFriendRequests: IFriendInfo[];
|
|
|
|
// OutgoingFriendRequests: IFriendInfo[];
|
|
|
|
// }
|
|
|
|
type IGetFriendsResponse = Record<"Current" | "IncomingFriendRequests" | "OutgoingFriendRequests", IFriendInfo[]>;
|