feat: support replies

This commit is contained in:
Stevan Freeborn
2023-09-14 21:47:40 -05:00
parent 0dc2934e05
commit 820ba6b1e8
14 changed files with 344 additions and 97 deletions
+45
View File
@@ -1,6 +1,7 @@
import { paginationOptsValidator } from 'convex/server';
import { v } from 'convex/values';
import { PostWithUserDto } from '../src/app/types';
import { Id } from './_generated/dataModel';
import { mutation, query } from './_generated/server';
import { userQuery } from './users';
@@ -86,7 +87,51 @@ export const getPostById = query({
_creationTime: user._creationTime,
clerkUsername: user.clerkUser.username,
clerkImageUrl: user.clerkUser.image_url,
clerkUserId: user.clerkUser.id,
},
};
},
});
export const getRepliesByParentId = query({
args: { id: v.id('posts'), paginationOpts: paginationOptsValidator },
handler: async (ctx, args) => {
const replies = await ctx.db
.query('posts')
.withIndex('by_parent_id', q => q.eq('parentPostId', args.id))
.order('desc')
.paginate(args.paginationOpts);
const repliesWithUserData = await Promise.all(
replies.page.map(async reply => {
const user = await ctx.db.get(reply.userId);
if (user === null) {
return {
...reply,
user: {
_id: '' as Id<'users'>,
_creationTime: 0,
clerkUsername: null,
clerkImageUrl: '',
clerkUserId: '',
},
};
}
return {
...reply,
user: {
_id: user._id,
_creationTime: user._creationTime,
clerkUsername: user.clerkUser.username,
clerkImageUrl: user.clerkUser.image_url,
clerkUserId: user.clerkUser.id,
},
};
})
);
return { ...replies, page: repliesWithUserData };
},
});
+3 -1
View File
@@ -39,7 +39,9 @@ export default defineSchema(
parentPostId: v.optional(v.id('posts')),
userId: v.id('users'),
content: v.array(v.string()),
}).index('by_user_id', ['userId']),
})
.index('by_user_id', ['userId'])
.index('by_parent_id', ['parentPostId']),
},
{ schemaValidation: false }
);
+2
View File
@@ -28,6 +28,7 @@ export const getUserByClerkId = query({
_creationTime: user._creationTime,
clerkUsername: user.clerkUser.username,
clerkImageUrl: user.clerkUser.image_url,
clerkUserId: user.clerkUser.id,
};
},
});
@@ -46,6 +47,7 @@ export const getUserById = query({
_creationTime: user._creationTime,
clerkUsername: user.clerkUser.username,
clerkImageUrl: user.clerkUser.image_url,
clerkUserId: user.clerkUser.id,
};
},
});