diff --git a/apps/portal/src/pages/offers/test/createProfile.tsx b/apps/portal/src/pages/offers/test/createProfile.tsx index 67897015..158412ef 100644 --- a/apps/portal/src/pages/offers/test/createProfile.tsx +++ b/apps/portal/src/pages/offers/test/createProfile.tsx @@ -158,6 +158,12 @@ function Test() { } }); + const replies = trpc.useQuery(['offers.comments.getComments', {profileId: 'cl96stky5002ew32gx2kale2x'}], { + onError(err) { + setError(err.shape?.message || "") + }, + }); + const deleteMutation = trpc.useMutation(['offers.profile.delete']); const handleDelete = (id: string) => { @@ -536,6 +542,7 @@ function Test() { return ( <> <div>{createdData}</div> + <div>{JSON.stringify(replies.data)}</div> <button type="button" onClick={handleClick}> Click Me! </button> diff --git a/apps/portal/src/server/router/index.ts b/apps/portal/src/server/router/index.ts index fcea8526..43fcbd8d 100644 --- a/apps/portal/src/server/router/index.ts +++ b/apps/portal/src/server/router/index.ts @@ -3,6 +3,7 @@ import superjson from 'superjson'; import { companiesRouter } from './companies-router'; import { createRouter } from './context'; import { offersRouter } from './offers/offers'; +import { offersCommentsRouter } from './offers/offers-comments-router'; import { offersProfileRouter } from './offers/offers-profile-router'; import { protectedExampleRouter } from './protected-example-router'; import { questionsAnswerCommentRouter } from './questions-answer-comment-router'; @@ -36,7 +37,8 @@ export const appRouter = createRouter() .merge('questions.questions.comments.', questionsQuestionCommentRouter) .merge('questions.questions.', questionsQuestionRouter) .merge('offers.', offersRouter) - .merge('offers.profile.', offersProfileRouter); + .merge('offers.profile.', offersProfileRouter) + .merge('offers.comments.', offersCommentsRouter); // Export type definition of API export type AppRouter = typeof appRouter; diff --git a/apps/portal/src/server/router/offers/offers-comments-router.ts b/apps/portal/src/server/router/offers/offers-comments-router.ts index b0608cdd..9f20fe57 100644 --- a/apps/portal/src/server/router/offers/offers-comments-router.ts +++ b/apps/portal/src/server/router/offers/offers-comments-router.ts @@ -3,7 +3,67 @@ import * as trpc from '@trpc/server'; import { createProtectedRouter } from '../context'; -export const offersProfileRouter = createProtectedRouter() +export const offersCommentsRouter = createProtectedRouter() + .query('getComments', { + input: z.object({ + profileId: z.string() + }), + async resolve({ ctx, input }) { + const result = await ctx.prisma.offersProfile.findFirst({ + include: { + discussion: { + include: { + replies: true, + replyingTo: true, + user: true + } + } + }, + where: { + id: input.profileId + } + }) + + if (result) { + return result.discussion.filter((x) => x.replyingToId === null) + } + + return result + } + }) + .mutation("create", { + input: z.object({ + message: z.string(), + profileId: z.string(), + replyingToId: z.string().optional(), + userId: z.string() + }), + async resolve({ ctx, input }) { + await ctx.prisma.offersReply.create({ + data: { + message: input.message, + profile: { + connect: { + id: input.profileId + } + }, + replyingTo: { + connect: { + id: input.replyingToId + } + }, + user: { + connect: { + id: input.userId + } + } + } + }) + + // Get replies + return + } + }) .mutation("update", { input: z.object({ id: z.string(), @@ -30,7 +90,7 @@ export const offersProfileRouter = createProtectedRouter() // To validate user editing, OP or correct user // TODO: improve validation process if (profileEditToken === input.token || messageToUpdate?.userId === input.userId) { - await ctx.prisma.offersReply.update({ + return await ctx.prisma.offersReply.update({ data: { message: input.message }, diff --git a/apps/portal/src/server/router/offers/offers-profile-router.ts b/apps/portal/src/server/router/offers/offers-profile-router.ts index 944cc3e0..2cce77fb 100644 --- a/apps/portal/src/server/router/offers/offers-profile-router.ts +++ b/apps/portal/src/server/router/offers/offers-profile-router.ts @@ -985,6 +985,7 @@ export const offersProfileRouter = createRouter() include: { replies: true, replyingTo: true, + user: true }, }, offers: { @@ -1042,10 +1043,8 @@ export const offersProfileRouter = createRouter() const profileEditToken = profile?.editToken; - // To validate user editing, OP or correct user - // TODO: improve validation process if (profileEditToken === input.token) { - return await ctx.prisma.offersProfile.update({ + const updated = await ctx.prisma.offersProfile.update({ data: { user: { connect: { @@ -1057,6 +1056,12 @@ export const offersProfileRouter = createRouter() id: input.profileId } }) + + return { + id: updated.id, + profileName: updated.profileName, + userId: updated.userId + } } throw new trpc.TRPCError({