seeRoom.js

  import { prisma } from '../../../../generated/prisma-client';
  import { ROOM_FRAGMENT } from '../../../fragments';

  export default {
      Query: {
          seeRoom: async (_, args, { request, isAuthenticated }) => {
              isAuthenticated(request);
              const { id } = args;
              const { user } = request;
              const canSee = await prisma.$exists.room({
                  participants_some: { id: user.id }
              });
              if (canSee) {
                  return prisma.room({ id }).$fragment(ROOM_FRAGMENT);
              } else {
                  throw Error("you can't see this room");
              }
          }
      }
  };
  • 볼수있는 방인지 판단

    방의 참가자 중에 requestuser.id가 존재하는지 확인

    prisma.$exists.room({
                    participants_some: { id: user.id }
                });
    
  • 방의 모든 정보 return

    ROOM_FRAGMENT에서 모든 방의 정보를 조회할 수 있음.

    prisma.room({ id }).$fragment(ROOM_FRAGMENT);
    
    • fragment.js

      export const MESSAGE_FRAGMENT = `
          id
          text
          to {
             ${USER_FRAGMENT}
          } 
          from {
              ${USER_FRAGMENT}
          }
      `;
      
      export const ROOM_FRAGMENT = `
          fragment RoomParts on Room  {
              id
              participants {
                  ${USER_FRAGMENT}
              }
              messages {
                  ${MESSAGE_FRAGMENT}
              }
          }
      `;