ការលុប​ទិន្នន័យ​នៃ​ការផ្សាយ​ត្រូវ​ធ្វើឡើង​តាម​រយៈ​ក្បួន​ចុង​​ផ្លូវ​ឬ 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()

 

Netlify: https://khmerweb-dynamic-blog.netlify.app/admin

GitHub: https://github.com/Sokhavuth/dynamic-blog