카독이나 문자에서 읽으면 1표시가 사라지는 거나, 않읽은 message가 몇개 있고 ,
고런걸 표시하는 Fn
import { gql } from 'apollo-server'
export default gql`
type readMessageResult {
ok: Boolean!
error: String
}
type Mutation {
readMessage(id: Int!): readMessageResult
}
`
message의 id를 args로 받음.
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를 사용