[resumes][feat] add resume comment parent

pull/401/head
Terence Ho 3 years ago
parent 11df1e1f1c
commit ecf67bc23d

@ -0,0 +1,5 @@
-- AlterTable
ALTER TABLE "ResumesComment" ADD COLUMN "parentId" TEXT;
-- AddForeignKey
ALTER TABLE "ResumesComment" ADD CONSTRAINT "ResumesComment_parentId_fkey" FOREIGN KEY ("parentId") REFERENCES "ResumesComment"("id") ON DELETE SET NULL ON UPDATE CASCADE;

@ -140,6 +140,7 @@ model ResumesComment {
id String @id @default(cuid())
userId String
resumeId String
parentId String?
description String @db.Text
section ResumesSection
createdAt DateTime @default(now())
@ -147,6 +148,8 @@ model ResumesComment {
resume ResumesResume @relation(fields: [resumeId], references: [id], onDelete: Cascade)
votes ResumesCommentVote[]
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
parent ResumesComment? @relation("parentComment", fields: [parentId], references: [id])
children ResumesComment[] @relation("parentComment")
}
enum ResumesSection {

@ -15,6 +15,19 @@ export const resumeCommentsRouter = createRouter().query('list', {
// The user's name and image to render
const comments = await ctx.prisma.resumesComment.findMany({
include: {
children: {
include: {
user: {
select: {
image: true,
name: true,
},
},
},
orderBy: {
createdAt: 'desc',
},
},
user: {
select: {
image: true,
@ -26,12 +39,30 @@ export const resumeCommentsRouter = createRouter().query('list', {
createdAt: 'desc',
},
where: {
resumeId,
AND: [{ resumeId }, { parentId: null }],
},
});
return comments.map((data) => {
const children: Array<ResumeComment> = data.children.map((child) => {
return {
children: [],
createdAt: child.createdAt,
description: child.description,
id: child.id,
resumeId: child.resumeId,
section: child.section,
updatedAt: child.updatedAt,
user: {
image: child.user.image,
name: child.user.name,
userId: child.userId,
},
};
});
const comment: ResumeComment = {
children,
createdAt: data.createdAt,
description: data.description,
id: data.id,

@ -5,6 +5,7 @@ import type { ResumesCommentVote, ResumesSection } from '@prisma/client';
* frontend-friendly representation of the query
*/
export type ResumeComment = Readonly<{
children: Array<ResumeComment>;
createdAt: Date;
description: string;
id: string;

Loading…
Cancel
Save