ស្រដៀង​គ្នា​នឹង​ការលុប​ទំព័រ​ការផ្សាយ ការលុប​ទំព័រ​ស្តាទិក​ត្រូវ​ធ្វើ​ឡើង​នៅ​ក្នុង​ក្បួន​ចុង​ផ្លូវ​ឬ API Endpoint នៅ​ក្នុង​ថត ​src/pages/api/admin/page/delete ។ ឯកសារ​នៃ​ក្បួន​ចុង​ផ្លូវ​ឬ​ API Endpoint ​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​ត្រូវមាន​ឈ្មោះ​ថា [id].js ដែល​ជា​ប៉ារ៉ាម៉ែត​មួយ​ចាំទទួល​យក​អត្តសញ្ញាណ​របស់​ទំព័រ​ស្តាទិក​ដែល​ត្រូវ​លុប​។ បាន​ន័យ​ថា​ផ្លូវ​សំរាប់​លុប​ឯកសារ​ស្តាទិក​ក៏​​ជា​ផ្លូវ​ឌីណាមិក​មួយ​ដែរ​។

 

// src/pages/api/admin/page/delete/[id].js

import page from "../../../../../data/page.js"

export async function GET({ locals, params, redirect, url }){
    const userAdmin = locals.userAdmin
    const userAuth = locals.userAuth
    const prisma = locals.prisma
    
    let currentPage = url.searchParams.get('page') || ''
    if(currentPage){
        currentPage = "?page=" + currentPage
    }
    
    if(userAuth?.userId){
        if(userAdmin){
            await page.delete({prisma, params})
        }
        return redirect("/admin/page"+currentPage, 302)
    }else{
        return redirect('/login', 302)
    }
}

 

ដោយ​ហេតុថា ក្បួន​ចុង​ផ្លូវ​ឬ API Endpoint ខាង​លើ​ត្រូវការ​​នាំ​ចូល​ក្បួន​ខ្នាតនៅ​​ក្នុង​ឯសារ page.js ​​​​​​​នៅក្នុង​ថត src/data ​​​មកប្រើការ​នៅ​ក្នុង​ការ​លុប​ទិន្នន័យ​ដែល​ជា​ទំព័រ​ស្តាទិក ដូចនេះ​យើង​ចាំបាច់​ត្រូវ​បង្កើតក្បួន​ខ្នាត​ចាំបាច់​នៅ​ក្នុងឯកសារ​ page.js នេះ​ ក្នុង​គោល​បំណងផ្តល់​លទ្ធភាព​អោយ​ក្បួន​ចុង​ផ្លូវ​ឬ API Endpoint អាច​លុប​ទិន្នន័យ​នៃ​ទំព័រ​ស្តាទិកបាន​គ្រប់​ពេល​វេលា​។ មួយ​វិញ​ទៀត មុន​នឹង​លុប​ទិន្នន័យ​នៃ​ទំព័រ​ស្តាទិក​ណា​មួយ អ្នក​និពន្ធ​ចាំបាច់​ត្រូវ​ឆ្លង​កាត់​ការត្រួត​ពិនិត្យ​ពី​តួនាទីរបស់​ខ្លួន​។ មាន​តែ​អ្នក​និពន្ធ​មាន​តួនាទី​ជា Admin តែ​ប៉ុណ្ណោះ ទើប​មាន​សិទ្ធិ​អាច​លុប​ទំព័រ​ស្តាទិក​បាន​។

 

// src/data/page.js

class Page{
    async count(req, query={}){
        return await req.prisma.page.count(query)
    }

    async create(req){
        const new_page = {
            title: req.body.title,
            content: req.body.content,
            thumb: req.body.thumb,
            date: req.body.datetime,
        }
        
        await req.prisma.page.create({ data: new_page })
    }

    async delete(req){
        await req.prisma.page.delete({ where: {id: req.params.id } })
    }

    async getItems(req, amount){
        return await req.prisma.page.findMany({ 
            take: amount, 
            orderBy: [{ date: "desc" }, { id: "desc" }]
        })
    }

    async paginate(req, amount){
        const pages = await req.prisma.page.findMany({ 
            orderBy: [{ date: "desc" }, { id: "desc" }],
            skip: amount * (parseInt(req.currentPage) - 1),
            take: amount
        })

        return pages
    }
}

export default new Page()

 

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

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