diff --git a/api/resolvers/user.js b/api/resolvers/user.js index 63da54a1..983a0b15 100644 --- a/api/resolvers/user.js +++ b/api/resolvers/user.js @@ -2,21 +2,6 @@ import { AuthenticationError, UserInputError } from 'apollo-server-errors' import { createMentions, getItem, SELECT } from './item' import serialize from './serial' -export const createBio = async (parent, { bio }, { me, models }) => { - if (!me) { - throw new AuthenticationError('you must be logged in') - } - - const [item] = await serialize(models, - models.$queryRaw(`${SELECT} FROM create_bio($1, $2, $3) AS "Item"`, - `@${me.name}'s bio`, bio, Number(me.id))) - - await createMentions(item, models) - - item.comments = [] - return item -} - export default { Query: { me: async (parent, args, { models, me }) => @@ -50,7 +35,31 @@ export default { throw error } }, - createBio: createBio + upsertBio: async (parent, { bio }, { me, models }) => { + if (!me) { + throw new AuthenticationError('you must be logged in') + } + + const user = await models.user.findUnique({ where: { id: me.id } }) + + let item + if (user.bioId) { + item = await models.item.update({ + where: { id: Number(user.bioId) }, + data: { + text: bio + } + }) + } else { + ([item] = await serialize(models, + models.$queryRaw(`${SELECT} FROM create_bio($1, $2, $3) AS "Item"`, + `@${me.name}'s bio`, bio, Number(me.id)))) + } + + await createMentions(item, models) + + return await models.user.findUnique({ where: { id: me.id } }) + } }, User: { diff --git a/api/typeDefs/user.js b/api/typeDefs/user.js index 532bebee..8ce4d543 100644 --- a/api/typeDefs/user.js +++ b/api/typeDefs/user.js @@ -10,11 +10,12 @@ export default gql` extend type Mutation { setName(name: String!): Boolean - createBio(bio: String!): Item! + upsertBio(bio: String!): User! } type User { id: ID! + createdAt: String! name: String nitems: Int! ncomments: Int! diff --git a/components/comment.js b/components/comment.js index 3730edc3..f5d878c0 100644 --- a/components/comment.js +++ b/components/comment.js @@ -41,7 +41,7 @@ function Parent ({ item, rootText }) { export default function Comment ({ item, children, replyOpen, includeParent, - rootText, noComments + rootText, noComments, noReply }) { const [edit, setEdit] = useState() const [collapse, setCollapse] = useState(false) @@ -130,9 +130,10 @@ export default function Comment ({