sdy

create newMessage

type Mutation {
newMessage(receiverId: String!, message: String!, roomId: String!): Message!
}
import { isAuthenticated, prisma } from "../../../utils";
import { NEW_MESSAGE_TOPIC } from "../../../topics";
export default {
Mutation: {
newMessage: async (_, args, { request, pubsub }) => {
// isAuthenticated(request);
const { user } = request;
const { receiverId, message, roomId } = args;
let room;
// 방이 없는 경우
if (roomId === undefined) {
// 보내는 사람과 받는 사람이 다른 경우
if (user.id !== receiverId) {
room = await prisma.room.create({
data: {
participants: {
connect: [{ id: receiverId }, { id: user.id }],
},
},
});
} else {
// 자기 자신에게 보내는 경우
room = await prisma.room.create({
data: {
participants: {
connect: [{ id: user.id }],
},
},
});
}
} else {
// 방이 있는 경우
room = await prisma.room.findOne({
where: {
id: roomId,
},
});
}
if (!room) {
throw new Error("There is no room");
}
// 메시지 생성부분. (지금은 1명 밖에 안들어간 구조.)
const newMessage = await prisma.message.create({
data: {
text: message,
to: {
connect: {
id: receiverId,
},
},
from: {
connect: {
id: user.id,
},
},
room: {
connect: {
id: room.id,
},
},
},
});
pubsub.publish(NEW_MESSAGE_TOPIC, { newMessage });
return newMessage;
},
},
};