From 1312cc2b7885cc36ed4572855bc1ccafe5511969 Mon Sep 17 00:00:00 2001
From: KaichiManabe <154493010+KaichiManabe@users.noreply.github.com>
Date: Mon, 2 Dec 2024 17:58:44 +0900
Subject: [PATCH 7/8] =?UTF-8?q?=E3=83=A1=E3=83=83=E3=82=BB=E3=83=BC?=
=?UTF-8?q?=E3=82=B8=E3=82=92=E9=80=81=E3=81=A3=E3=81=9F=E4=BA=BA=E3=81=A8?=
=?UTF-8?q?=E9=80=81=E3=82=89=E3=82=8C=E3=81=9F=E4=BA=BA=E3=81=A7=E8=A1=A8?=
=?UTF-8?q?=E7=A4=BA=E3=82=92=E5=A4=89=E6=9B=B4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
server/src/database/chat.ts | 82 +++++++++++++++++++++---------
server/src/functions/chat.ts | 14 ++---
web/components/chat/RoomList.tsx | 32 +++++++++---
web/components/chat/RoomWindow.tsx | 59 +++++++++++++--------
4 files changed, 125 insertions(+), 62 deletions(-)
diff --git a/server/src/database/chat.ts b/server/src/database/chat.ts
index 82a49999..2a1e8307 100644
--- a/server/src/database/chat.ts
+++ b/server/src/database/chat.ts
@@ -14,7 +14,11 @@ import type {
} from "common/types";
import { prisma } from "./client";
import { getRelation } from "./matches";
-import { getMatchedUser, getPendingRequestsToUser } from "./requests";
+import {
+ getMatchedUser,
+ getPendingRequestsFromUser,
+ getPendingRequestsToUser,
+} from "./requests";
export async function getOverview(
user: UserID,
@@ -23,10 +27,14 @@ export async function getOverview(
const matched = await getMatchedUser(user);
if (!matched.ok) return Err(matched.error);
- const requester = await getPendingRequestsToUser(user);
- if (!requester.ok) return Err(requester.error);
+ const senders = await getPendingRequestsToUser(user);
+ if (!senders.ok) return Err(senders.error);
- const dm = await Promise.all(
+ const receivers = await getPendingRequestsFromUser(user);
+ if (!receivers.ok) return Err(receivers.error);
+
+ //マッチングしている人のオーバービュー
+ const matchingOverview = await Promise.all(
matched.value.map(async (friend) => {
const lastMessageResult = await getLastMessage(user, friend.id);
const lastMessage = lastMessageResult.ok
@@ -34,7 +42,7 @@ export async function getOverview(
: undefined;
const overview: DMOverview = {
isDM: true,
- isFriend: true,
+ matchingStatus: "matched",
friendId: friend.id,
name: friend.name,
thumbnail: friend.pictureUrl,
@@ -44,6 +52,44 @@ export async function getOverview(
}),
);
+ //自分にリクエストを送ってきた人のオーバービュー
+ const senderOverview = await Promise.all(
+ senders.value.map(async (sender) => {
+ const lastMessageResult = await getLastMessage(user, sender.id);
+ const lastMessage = lastMessageResult.ok
+ ? lastMessageResult.value
+ : undefined;
+ const overview: DMOverview = {
+ isDM: true,
+ matchingStatus: "otherRequest",
+ friendId: sender.id,
+ name: sender.name,
+ thumbnail: sender.pictureUrl,
+ lastMsg: lastMessage,
+ };
+ return overview;
+ }),
+ );
+
+ //自分がリクエストを送った人のオーバービュー
+ const receiverOverview = await Promise.all(
+ receivers.value.map(async (receiver) => {
+ const lastMessageResult = await getLastMessage(user, receiver.id);
+ const lastMessage = lastMessageResult.ok
+ ? lastMessageResult.value
+ : undefined;
+ const overview: DMOverview = {
+ isDM: true,
+ matchingStatus: "myRequest",
+ friendId: receiver.id,
+ name: receiver.name,
+ thumbnail: receiver.pictureUrl,
+ lastMsg: lastMessage,
+ };
+ return overview;
+ }),
+ );
+
const sharedRooms: {
id: number;
name: string;
@@ -65,26 +111,12 @@ export async function getOverview(
return overview;
});
- // リクエスター (友達申請者) のオーバービュー作成
- const requesterOverview = await Promise.all(
- requester.value.map(async (requester) => {
- const lastMessageResult = await getLastMessage(user, requester.id);
- const lastMessage = lastMessageResult.ok
- ? lastMessageResult.value
- : undefined;
- const overview: DMOverview = {
- isDM: true,
- isFriend: false,
- friendId: requester.id,
- name: requester.name,
- thumbnail: requester.pictureUrl,
- lastMsg: lastMessage,
- };
- return overview;
- }),
- );
-
- return Ok([...shared, ...dm, ...requesterOverview]);
+ return Ok([
+ ...matchingOverview,
+ ...senderOverview,
+ ...receiverOverview,
+ ...shared,
+ ]);
} catch (e) {
return Err(e);
}
diff --git a/server/src/functions/chat.ts b/server/src/functions/chat.ts
index 839a6a54..1e748918 100644
--- a/server/src/functions/chat.ts
+++ b/server/src/functions/chat.ts
@@ -61,17 +61,17 @@ export async function sendDM(
}
export async function getDM(
- requester: UserID,
- _with: UserID,
+ user: UserID,
+ friend: UserID,
): Promise
> {
- const rel = await getRelation(requester, _with);
+ const rel = await getRelation(user, friend);
if (!rel.ok || rel.value.status === "REJECTED")
return http.forbidden("cannot send to rejected-friend");
- const room = await db.getDMbetween(requester, _with);
+ const room = await db.getDMbetween(user, friend);
if (!room.ok) return http.internalError();
- const friendData = await getUserByID(_with);
+ const friendData = await getUserByID(friend);
if (!friendData.ok) return http.notFound("friend not found");
const personalized: PersonalizedDMRoom & DMRoom = {
@@ -80,9 +80,9 @@ export async function getDM(
matchingStatus:
rel.value.status === "MATCHED"
? "matched"
- : rel.value.status === "PENDING"
+ : rel.value.sendingUserId === user //どっちが送ったリクエストなのかを判定
? "myRequest"
- : "otherRequest", //Fix Me: これだとREJECTEDの時に、matchingStatus = otherRequest になってしまう。本当はちゃんと判別しないといけない。呼び出し口でこれがちゃんと使われてないので、無視している。
+ : "otherRequest",
...room.value,
};
diff --git a/web/components/chat/RoomList.tsx b/web/components/chat/RoomList.tsx
index 154c9594..710feb3c 100644
--- a/web/components/chat/RoomList.tsx
+++ b/web/components/chat/RoomList.tsx
@@ -3,7 +3,6 @@
import { Box, List, Typography } from "@mui/material";
import type { RoomOverview } from "common/types";
import { useRouter } from "next/navigation";
-import request from "~/api/request";
import { HumanListItem } from "../human/humanListItem";
type RoomListProps = {
@@ -35,7 +34,7 @@ export function RoomList(props: RoomListProps) {
{roomsData?.map((room) => {
if (room.isDM) {
- if (!room.isFriend) {
+ if (room.matchingStatus === "otherRequest") {
return (
{
- request.accept(room.friendId).then(() => location.reload());
- }}
- onReject={() => {
- request.reject(room.friendId).then(() => location.reload());
- }}
+ statusMessage="リクエストを受けました"
/>
);
}
+ if (room.matchingStatus === "myRequest") {
+ return (
+ {
+ e.stopPropagation();
+ navigateToRoom(room);
+ }}
+ >
+
+
+ );
+ }
+ // if (room.matchingStatus === "matched")
return (
- {!room.isFriend && (
+ {room.matchingStatus !== "matched" && (
)}
@@ -258,11 +263,17 @@ export function RoomWindow(props: Props) {
type FloatingMessageProps = {
message: string;
- friendId: UserID;
+ friendId: number;
+ showButtons: boolean;
};
-const FloatingMessage = ({ message, friendId }: FloatingMessageProps) => {
+const FloatingMessage = ({
+ message,
+ friendId,
+ showButtons,
+}: FloatingMessageProps) => {
const router = useRouter();
+
return (
{
}}
>
{message}
- {/* biome-ignore lint/a11y/useButtonType:
*/}
-
- {/* biome-ignore lint/a11y/useButtonType: */}
-
+ {showButtons && (
+
+ {/* biome-ignore lint/a11y/useButtonType: */}
+
+ {/* biome-ignore lint/a11y/useButtonType: */}
+
+
+ )}
);
From 9ff61178b2157d1c605ac1e6ebcb01554ef0c6ba Mon Sep 17 00:00:00 2001
From: aster <137767097+aster-void@users.noreply.github.com>
Date: Mon, 2 Dec 2024 18:51:06 +0900
Subject: [PATCH 8/8] change floating message
---
web/components/chat/RoomWindow.tsx | 6 +-----
1 file changed, 1 insertion(+), 5 deletions(-)
diff --git a/web/components/chat/RoomWindow.tsx b/web/components/chat/RoomWindow.tsx
index 75e05fd2..75a1a9bd 100644
--- a/web/components/chat/RoomWindow.tsx
+++ b/web/components/chat/RoomWindow.tsx
@@ -160,11 +160,7 @@ export function RoomWindow(props: Props) {
<>
{room.matchingStatus !== "matched" && (