33. readMessage

김종민·2022년 4월 29일
0

insta-backend

목록 보기
32/37

카독이나 문자에서 읽으면 1표시가 사라지는 거나, 않읽은 message가 몇개 있고 ,
고런걸 표시하는 Fn

1. readMessage.typeDefs.js

import { gql } from 'apollo-server'

export default gql`
  type readMessageResult {
    ok: Boolean!
    error: String
  }
  type Mutation {
    readMessage(id: Int!): readMessageResult
  }
`

message의 id를 args로 받음.

2. readMessage.resolvers.js

import prisma from '../../client'
import { protectedResolver } from '../../users/users.util'

export default {
  Mutation: {
    readMessage: protectedResolver(async (_, { id }, { loggedInUser }) => {
      const message = await prisma.message.findFirst({
        where: {
          id,
          ///id로 message 찾음.
          
          userId: {
            not: loggedInUser.id,
          },
          ///id로 찾은 message의 userId가 loggedInUser.id이면 안됨...
          
          room: {
            users: {
              some: {
                id: loggedInUser.id,
              },
            },
          },
          ///message가 있는 room의 usrs들 중에 loggedInUser.id가 있어야함.
        },
        select: { id: true },
        ///DB과부하를 막기 위해서 message의 id만 가지고 옴
      })
      if (!message) {
        return {
          ok: false,
          error: 'Message not found',
        }
      }
      await prisma.message.update({
        where: { id },
        data: { read: true },
        ///위에서 findFirst로 찾은 message의 read를 false에서 true로 바꿔줌,
        
      })
      return {
        ok: true,
      }
    }),
  },
}

findUnique: 하나만 있는것, ex)id, where에도 하나만 붙음.
findFirst: where속성에 id뿐만 아니하 user, room등 2~3개가 붙을떄, findFirst를 사용

profile
코딩하는초딩쌤

0개의 댓글