ការលុបទិន្នន័យនៃការផ្សាយត្រូវធ្វើឡើងតាមរយៈក្បួនចុងផ្លូវឬ API Route នៅក្នុងថត src/pages/api/admin/post/delete ។ ក្បួនចុងផ្លូវនោះអាចជាឯកសារមានឈ្មោះថា [id].js ដែលនឹងត្រូវទទួលយកប៉ារ៉ាម៉ែត id មកប្រើប្រាស់ក្នុងការលុបទិន្នន័យនៃការផ្សាយដែលមានអត្តសញ្ញាណដូចគ្នាទៅនឹងប៉ារ៉ាម៉ែត id នៅក្នុងមូលដ្ឋានទិន្នន័យ MongoDB ។
ទន្ទឹមនឹងនេះ ការលុបទិន្នន័យនៃការផ្សាយត្រូវធ្វើឡើងដោយមានការត្រួតពិនិត្យមើលថាតើអ្នកនិពន្ធដែលចង់លុបទិន្នន័យណាមួយនោះ មានសិទ្ធិក្នុងការធ្វើដូចនេះដែរឬទេ។ ពោលគឺត្រួតការពិនិត្យត្រូវធ្វើឡើងដោយការពិនិត្យមើលតួនាទីរបស់អ្នកនិពន្ធ។
មួយវិញទៀត អ្នកនិពន្ធទាំងឡាយដែលមានតួនាទីត្រឹមតែជា «Author» នឺងមានសិទ្ធិលុបតែការផ្សាយទាំងឡាយដែលត្រូវបានតែងនិពន្ធដោយខ្លួនគេផ្ទាល់តែប៉ុណ្ណោះ ពួកគេនឹងមិនអាចលុបអត្ថបទនៃការផ្សាយរបស់អ្នកដទៃបានឡើយ។ មានតែអ្នកនិពន្ធដែលមានតួនាទីជា « Admin» ប៉ុណ្ណោះ ដែលមានសិទ្ធិលុបអត្ថបទនៃការផ្សាយណាក៏បាន។
// src/pages/api/post/delete/[id].js
import post from "../../../../data/post.js"
export async function GET({ locals, params, redirect }){
const userAuth = locals.userAuth
const prisma = locals.prisma
if(userAuth?.userId){
if(userAuth.userRole !== "Guest"){
if(userAuth.userRole !== "Admin"){
const item = await post.getPost({prisma, params})
if(userAuth.userId === item.userid){
await post.delete({prisma, params})
}
}else if(userAuth.userRole === "Admin"){
await post.delete({prisma, params})
}
}
return redirect('/admin', 302)
}else{
return redirect('/login', 302)
}
}
// src/data/post.js
class Post{
async count(req, query={}){
return await req.prisma.post.count(query)
}
async create(req){
const categories = req.body.categories
let Categories = []
if(categories.includes(',')){
let str = categories.replace(/\s+/g, "")
Categories = str.split(',')
}else{
Categories = [categories]
}
const new_post = {
title: req.body.title,
content: req.body.content,
categories: Categories,
thumb: req.body.thumb,
date: req.body.datetime,
videos: req.body.videos,
userid: req.userAuth.userId,
}
await req.prisma.post.create({ data: new_post })
}
async getPosts(req, amount){
return await req.prisma.post.findMany({
take: amount,
orderBy: [{ date: "desc" }, { id: "desc" }]
})
}
async getPost(req){
return await req.prisma.post.findUnique({ where: {id: req.params.id }})
}
async delete(req){
await req.prisma.post.delete({ where: {id: req.params.id } })
}
}
export default new Post()