មុន​នឹង​អាច​បង្កើត​ការផ្សាយ​បាន យើង​ត្រូវ​បង្កើត​ schema នៃ​ទិន្នន័យ​នៃ​ការផ្សាយ​ជា​មុន​សិន​នៅក្នុង​ឯកសារ prisma/schema.prisma ដោយ​ធ្វើ​ដូច​ខាង​ក្រោម​នេះ៖

 

// This is your Prisma schema file,
// learn more about it in the docs: https://pris.ly/d/prisma-schema

generator client {
  provider = "prisma-client-js"
}

datasource db {
  provider = "mongodb"
  url      = env("MONGO_URL")
}

model User {
  id      String   @id @default(auto()) @map("_id") @db.ObjectId
  email   String   @unique
  title   String
  password String
  role    String
  thumb   String
  content String
  date    String
}

model Post {
  id String @id @default(auto()) @map("_id") @db.ObjectId
  title String
  content String
  categories String[]
  thumb String
  date String
  videos String
  userid String
}

 

យន្តការ​បង្កើត​ការផ្សាយ (create post) ធ្វើ​ឡើង​ដោយ​ការបញ្ជូន​ទិន្នន័យ​មាន​នៅ​ក្នុង​ទំរង់បែបបទ​នៃ​ទំព័រ​ការផ្សាយ ទៅ​រក្សាទុក​នៅ​ក្នុង​មូលដ្ឋាន​ទិន្នន័យ MongoDB ។ ទិន្នន័យ​ទាំងឡាយ​ត្រូវ​ត្រួត​ពិនិត្យ​ពីរ​ដង ការត្រួត​ពិនិត្យ​លើក​ទី​មួយ​ត្រូវ​ធ្វើ​ឡើង​នៅ​ក្នុង browser ការត្រួតពិនិត្យ​លើក​ទី​ពីរ​ គឺ​ត្រូវ​ធ្វើ​ឡើង​​នៅ​លើ server ​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​នៅ​ក្នុង​ក្បួន​ចុង​ផ្លូវ​ឬ API Route នៅ​ក្នុង​ថត src/pages/api/post/create.js។ បើ​ទិន្នន័យ​ទាំងនោះ​សម​ស្រប​ទៅ​តាម​ការកំណត់​ហើយ យើង​អាច​បញ្ជូន​វា​ទៅ​រក្សា​ទុក​ក្នុង​មូលដ្ឋាន​ទិន្នន័យបាន​។ ការបញ្ជូន​នេះ​ត្រូវ​ធ្វើ​​ឡើង​តាម​រយៈ​ក្បួន​ខ្នាត​នៅ​ក្នុង​​ក្បួន​ចុង​ផ្លូវ​ឬ API Route ដែល​ខ្លួន​វា​ផ្ទាល់​បាន​នាំចូល​ក្បួនខ្នាត​នៅ​ក្នុង​ឯកសារ post.js នៅ​ក្នុង​ថត src/data ។ ទិន្នន័យ​ការផ្សាយ​ត្រូវ​បាន​បញ្ចូល​ទៅ​ក្នុង​មូលដ្ឋាន​ទិន្នន័យ​តាម​រយៈ​អថេរ prisma បាន​មក​ពី​ក្បួន​កណ្តាល​ឬ middleware ។ ចំនួន​ទិន្នន័យ​​នៃ​ការផ្សាយ​សរុប​នៅ​ក្នុង​មូលដ្ឋាន​ទិន្នន័យ MongoDB ត្រូវ​បាន​រាប់​ដោយ​វិធី​ count( ) ។

 

// src/pages/api/post/create.js

import post from "../../../data/post.js"

export async function POST({ locals, request, redirect }){
    const prisma = locals.prisma
    const userAuth = locals.userAuth

    if(userAuth.userRole !== "Guest"){
        const data = await request.formData()
        const title = data.get('title')
        const content = data.get('content')
        const categories = data.get('categories')
        const thumb = data.get('thumb')
        const datetime = data.get('datetime')
        const videos = data.get('videos')
    
        if((title && categories && thumb && datetime)){
            const body = {title, content, categories, thumb, datetime, videos}
            await post.create({ prisma, body, userAuth })
        }
    }

    return redirect('/admin', 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 })
    }
}

export default new Post()

 

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

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