មុននឹងអាចបង្កើតការផ្សាយបាន យើងត្រូវបង្កើត 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()