feat(api): create review endpoints for creating, editing, deletion and replying
This commit is contained in:
		
							parent
							
								
									356cb5ea6b
								
							
						
					
					
						commit
						9bf5e9dc38
					
				
							
								
								
									
										36
									
								
								server/api/review/[revid]/index.delete.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								server/api/review/[revid]/index.delete.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,36 @@ | ||||
| import { messages } from "~/lib/server/constants"; | ||||
| import isLoggedIn from "~/lib/server/middlewareButNotReally/isLoggedIn"; | ||||
| import { Story } from "~/models/stories"; | ||||
| import { Review } from "~/models/stories/review"; | ||||
| 
 | ||||
| export default eventHandler(async (ev) => { | ||||
| 	isLoggedIn(ev); | ||||
| 	const revid = parseInt(getRouterParam(ev, "revid")!); | ||||
| 	let c2d = await Review.findById(revid); | ||||
| 	if (!c2d) { | ||||
| 		throw createError({ | ||||
| 			statusCode: 404, | ||||
| 			message: messages[404], | ||||
| 		}); | ||||
| 	} | ||||
| 	let s2v = await Story.findById(c2d!.leftOn); | ||||
| 	if (!s2v) | ||||
| 		throw createError({ | ||||
| 			statusCode: 400, | ||||
| 			message: "bad parameter", | ||||
| 		}); | ||||
| 	if ( | ||||
| 		ev.context.currentUser!._id != s2v?.author && | ||||
| 		ev.context.currentUser!._id != c2d._id | ||||
| 	) | ||||
| 		throw createError({ | ||||
| 			statusCode: 403, | ||||
| 			message: messages[403], | ||||
| 		}); | ||||
| 	s2v.reviews += 1; | ||||
| 	await s2v!.save(); | ||||
| 	await Review.findByIdAndRemove(revid); | ||||
| 	return { | ||||
| 		success: true, | ||||
| 	}; | ||||
| }); | ||||
							
								
								
									
										16
									
								
								server/api/review/[revid]/index.get.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								server/api/review/[revid]/index.get.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,16 @@ | ||||
| import { messages } from "~/lib/server/constants"; | ||||
| import { Review } from "~/models/stories/review"; | ||||
| 
 | ||||
| export default eventHandler(async (ev) => { | ||||
| 	const revid = parseInt(getRouterParam(ev, "revid")!); | ||||
| 	const r = await Review.findById(revid) | ||||
| 		.populate("author", "username _id") | ||||
| 		.exec(); | ||||
| 	if (!r) { | ||||
| 		throw createError({ | ||||
| 			statusCode: 404, | ||||
| 			message: messages[404], | ||||
| 		}); | ||||
| 	} | ||||
| 	return r.toObject(); | ||||
| }); | ||||
							
								
								
									
										34
									
								
								server/api/review/[revid]/index.put.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								server/api/review/[revid]/index.put.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,34 @@ | ||||
| import san from "sanitize-html"; | ||||
| import { messages } from "~/lib/server/constants"; | ||||
| import isLoggedIn from "~/lib/server/middlewareButNotReally/isLoggedIn"; | ||||
| import { Review } from "~/models/stories/review"; | ||||
| 
 | ||||
| export default eventHandler(async (ev) => { | ||||
| 	isLoggedIn(ev); | ||||
| 	const revid = parseInt(getRouterParam(ev, "revid")!); | ||||
| 	let c = await Review.findById(revid); | ||||
| 	if (!c) { | ||||
| 		throw createError({ | ||||
| 			statusCode: 404, | ||||
| 			message: messages[404], | ||||
| 		}); | ||||
| 	} | ||||
| 	if (c?.author != ev.context.currentUser?._id) { | ||||
| 		throw createError({ | ||||
| 			message: messages[403], | ||||
| 			statusCode: 403, | ||||
| 		}); | ||||
| 	} | ||||
| 	const body = await readBody(ev); | ||||
| 	await Review.findByIdAndUpdate(revid, { | ||||
| 		$set: { | ||||
| 			text: san(body.content), | ||||
| 		}, | ||||
| 	}); | ||||
| 	return { | ||||
| 		success: true, | ||||
| 		data: await Review.findById(revid) | ||||
| 			.populate("author", "username _id") | ||||
| 			.exec(), | ||||
| 	}; | ||||
| }); | ||||
							
								
								
									
										50
									
								
								server/api/review/[revid]/reply.post.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								server/api/review/[revid]/reply.post.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,50 @@ | ||||
| import san from "sanitize-html"; | ||||
| import { messages } from "~/lib/server/constants"; | ||||
| import isLoggedIn from "~/lib/server/middlewareButNotReally/isLoggedIn"; | ||||
| import { Story } from "~/models/stories"; | ||||
| import { Review } from "~/models/stories/review"; | ||||
| 
 | ||||
| export default eventHandler(async (ev) => { | ||||
| 	isLoggedIn(ev); | ||||
| 	const revid = parseInt(getRouterParam(ev, "revid")!); | ||||
| 	let replyingTo = await Review.findOne({ | ||||
| 		_id: revid, | ||||
| 	}) | ||||
| 		.populate("author", "username _id blocked") | ||||
| 		.exec(); | ||||
| 	if (!replyingTo) { | ||||
| 		throw createError({ | ||||
| 			statusCode: 404, | ||||
| 			message: messages[404], | ||||
| 		}); | ||||
| 	} | ||||
| 	if ( | ||||
| 		replyingTo?.author.blocked.includes(ev.context.currentUser!._id) || | ||||
| 		ev.context.currentUser!.blocked.includes(replyingTo?.author._id) | ||||
| 	) { | ||||
| 		throw createError({ | ||||
| 			statusCode: 403, | ||||
| 			message: "That didn't work", | ||||
| 		}); | ||||
| 	} | ||||
| 	const body = await readBody(ev); | ||||
| 	const newReply = new Review({ | ||||
| 		author: ev.context.currentUser!._id, | ||||
| 		replyingTo: revid, | ||||
| 		text: san(body.content), | ||||
| 		leftOn: replyingTo?.leftOn, | ||||
| 		whichChapter: replyingTo.whichChapter, | ||||
| 		datePosted: new Date(), | ||||
| 	}); | ||||
| 	let nrs = await newReply.save(); | ||||
| 	replyingTo.replies.push(nrs._id); | ||||
| 	await replyingTo.save(); | ||||
| 	const story = await Story.findById(replyingTo.leftOn); | ||||
| 	return { | ||||
| 		back: `/story/${replyingTo.leftOn}/${ | ||||
| 			story!.chapters.findIndex((x) => x.id === nrs.whichChapter) + 1 | ||||
| 		}`,
 | ||||
| 		data: nrs.toObject(), | ||||
| 		success: true, | ||||
| 	}; | ||||
| }); | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user