Compare commits
1 commit
Author | SHA1 | Date | |
---|---|---|---|
|
9c54d1258c |
3
.gitignore
vendored
Normal file
|
@ -0,0 +1,3 @@
|
|||
node_modules
|
||||
# Keep environment variables out of version control
|
||||
.env
|
94
controller/blog.controller.js
Normal file
|
@ -0,0 +1,94 @@
|
|||
const { PrismaClient } = require("@prisma/client");
|
||||
const prisma = new PrismaClient();
|
||||
|
||||
async function createBlog(req, res) {
|
||||
const { slug, title, body, categoryIDs, tagIDs } = req.body;
|
||||
const coverImage = req.file ? req.file.path : null;
|
||||
try {
|
||||
const newBlog = await prisma.Blog.create({
|
||||
data: {
|
||||
slug,
|
||||
title,
|
||||
body,
|
||||
coverImage,
|
||||
categoryIDs: JSON.parse(categoryIDs),
|
||||
tagIDs: JSON.parse(tagIDs),
|
||||
},
|
||||
});
|
||||
res.status(201).json(newBlog);
|
||||
} catch (error) {
|
||||
console.error("Error creating blog:", error);
|
||||
res.status(500).json({ message: "Error creating blog" });
|
||||
}
|
||||
}
|
||||
|
||||
async function getBlogs(req, res) {
|
||||
try {
|
||||
const blogs = await prisma.Blog.findMany();
|
||||
res.json(blogs);
|
||||
} catch (error) {
|
||||
console.error("Error getting blogs:", error);
|
||||
res
|
||||
.status(500)
|
||||
.json({ message: "Error getting blogs", error: error.message });
|
||||
}
|
||||
}
|
||||
|
||||
async function updateBlog(req, res) {
|
||||
const { slug, title, body, categoryIDs, tagIDs } = req.body;
|
||||
const id = req.params.id;
|
||||
|
||||
try {
|
||||
const blog = await prisma.Blog.findUnique({
|
||||
where: { id },
|
||||
});
|
||||
|
||||
if (!blog) {
|
||||
return res.status(404).send({
|
||||
message: "Blog not found",
|
||||
});
|
||||
}
|
||||
|
||||
const updatedBlog = await prisma.Blog.update({
|
||||
where: { id },
|
||||
data: {
|
||||
slug,
|
||||
title,
|
||||
body,
|
||||
categoryIDs,
|
||||
tagIDs,
|
||||
},
|
||||
});
|
||||
|
||||
res.status(200).send(updatedBlog);
|
||||
} catch (error) {
|
||||
console.error("Error updating blog:", error);
|
||||
res.status(500).send({
|
||||
message: "Error updating blog",
|
||||
error: error.message,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
async function deleteBlog(req, res) {
|
||||
const { id } = req.params;
|
||||
|
||||
try {
|
||||
const blog = await prisma.Blog.delete({
|
||||
where: { id },
|
||||
});
|
||||
res.json(blog);
|
||||
} catch (error) {
|
||||
console.error("Error deleting blog:", error);
|
||||
res
|
||||
.status(500)
|
||||
.json({ message: "Error deleting blog", error: error.message });
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
createBlog,
|
||||
getBlogs,
|
||||
updateBlog,
|
||||
deleteBlog,
|
||||
};
|
38
controller/bulkUpload.controller.js
Normal file
|
@ -0,0 +1,38 @@
|
|||
const { PrismaClient } = require("@prisma/client");
|
||||
const prisma = new PrismaClient();
|
||||
const csv = require("csv-parser");
|
||||
const fs = require("fs");
|
||||
|
||||
async function bulkUploadBlogs(req, res) {
|
||||
const filePath = req.file.path;
|
||||
const blogs = [];
|
||||
|
||||
fs.createReadStream(filePath)
|
||||
.pipe(csv())
|
||||
.on("data", (row) => {
|
||||
blogs.push(row);
|
||||
})
|
||||
.on("end", async () => {
|
||||
try {
|
||||
const createdBlogs = await prisma.Blog.createMany({
|
||||
data: blogs.map((blog) => ({
|
||||
slug: blog.slug,
|
||||
title: blog.title,
|
||||
body: blog.body,
|
||||
categoryIDs: blog.categoryIDs.split(","),
|
||||
tagIDs: blog.tagIDs.split(","),
|
||||
coverImage: blog.coverImage,
|
||||
})),
|
||||
});
|
||||
res.status(201).json(createdBlogs);
|
||||
} catch (err) {
|
||||
console.error("Error creating blogs:", err);
|
||||
res.status(500).json({ message: "Error creating blogs" });
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
bulkUploadBlogs,
|
||||
};
|
||||
|
84
controller/category.controller.js
Normal file
|
@ -0,0 +1,84 @@
|
|||
const { PrismaClient } = require("@prisma/client");
|
||||
const prisma = new PrismaClient();
|
||||
|
||||
async function createCategory(req, res) {
|
||||
const { name, blogIDs, blogs } = req.body;
|
||||
try {
|
||||
const newCategory = await prisma.Category.create({
|
||||
data: {
|
||||
name,
|
||||
blogIDs,
|
||||
blogs,
|
||||
},
|
||||
});
|
||||
res.status(201).json(newCategory);
|
||||
} catch (error) {
|
||||
console.error("Error creating comment:", error);
|
||||
res.status(500).json({ message: "Error creating blog" });
|
||||
}
|
||||
}
|
||||
|
||||
async function getCategory(req, res) {
|
||||
try {
|
||||
const categories = await prisma.Category.findMany();
|
||||
res.json(categories);
|
||||
} catch (error) {
|
||||
console.error("Error getting blogs:", error);
|
||||
res
|
||||
.status(500)
|
||||
.json({ message: "Error getting blogs", error: error.message });
|
||||
}
|
||||
}
|
||||
|
||||
async function updateCategory(req, res) {
|
||||
const { name, blog, blogIDs } = req.body;
|
||||
const id = req.params.id;
|
||||
try {
|
||||
const Categories = await prisma.Category.findUnique({
|
||||
where: { id },
|
||||
});
|
||||
if (!Categories) {
|
||||
return res.status(404).send({
|
||||
message: "Comment not found",
|
||||
});
|
||||
}
|
||||
const updatedCategory = await prisma.Category.update({
|
||||
where: { id },
|
||||
data: {
|
||||
name,
|
||||
blog,
|
||||
blogIDs,
|
||||
},
|
||||
});
|
||||
|
||||
res.status(200).send(updatedCategory);
|
||||
} catch (error) {
|
||||
console.error("Error updating Category:", error);
|
||||
res.status(500).send({
|
||||
message: "Error updating Category",
|
||||
error: error.message,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
async function deleteCategory(req, res) {
|
||||
const { id } = req.params;
|
||||
try {
|
||||
const delCategory = await prisma.Category.delete({
|
||||
where: { id },
|
||||
});
|
||||
res.json(delCategory);
|
||||
} catch (error) {
|
||||
console.error("Error deleting comment:", error);
|
||||
res
|
||||
.status(500)
|
||||
.json({ message: "Error deleting comment", error: error.message });
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
createCategory,
|
||||
getCategory,
|
||||
updateCategory,
|
||||
deleteCategory,
|
||||
};
|
86
controller/comments.controller.js
Normal file
|
@ -0,0 +1,86 @@
|
|||
const { PrismaClient } = require("@prisma/client");
|
||||
const prisma = new PrismaClient();
|
||||
|
||||
async function createComments(req, res) {
|
||||
const { comment, blogId } = req.body;
|
||||
|
||||
try {
|
||||
const newComment = await prisma.Comment.create({
|
||||
data: {
|
||||
comment,
|
||||
blogId,
|
||||
},
|
||||
});
|
||||
res.status(201).json(newComment);
|
||||
} catch (error) {
|
||||
console.error("Error creating comment:", error);
|
||||
res
|
||||
.status(500)
|
||||
.json({ message: "Error creating comment", error: error.message });
|
||||
}
|
||||
}
|
||||
|
||||
async function getComments(req, res) {
|
||||
try {
|
||||
const comments = await prisma.Comment.findMany();
|
||||
res.json(comments);
|
||||
} catch (error) {
|
||||
console.error("Error creating comment:", error);
|
||||
res
|
||||
.status(500)
|
||||
.json({ message: "Error creating comment", error: error.message });
|
||||
}
|
||||
}
|
||||
|
||||
async function updateComments(req, res) {
|
||||
const { comment, blog, blogId } = req.body;
|
||||
const id = req.params.id;
|
||||
try {
|
||||
const comments = await prisma.Comment.findUnique({
|
||||
where: { id },
|
||||
});
|
||||
if (!comments) {
|
||||
return res.status(404).send({
|
||||
message: "Comment not found",
|
||||
});
|
||||
}
|
||||
const updatedComment = await prisma.Comment.update({
|
||||
where: { id },
|
||||
data: {
|
||||
comment,
|
||||
blog,
|
||||
blogId,
|
||||
},
|
||||
});
|
||||
|
||||
res.status(200).send(updatedComment);
|
||||
} catch (error) {
|
||||
console.error("Error updating comment:", error);
|
||||
res.status(500).send({
|
||||
message: "Error updating comment",
|
||||
error: error.message,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
async function deleteComments(req, res) {
|
||||
const { id } = req.params;
|
||||
try {
|
||||
const comment = await prisma.Comment.delete({
|
||||
where: { id },
|
||||
});
|
||||
res.json(comment);
|
||||
} catch (error) {
|
||||
console.error("Error deleting comment:", error);
|
||||
res
|
||||
.status(500)
|
||||
.json({ message: "Error deleting comment", error: error.message });
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
createComments,
|
||||
getComments,
|
||||
updateComments,
|
||||
deleteComments,
|
||||
};
|
82
controller/tags.controller.js
Normal file
|
@ -0,0 +1,82 @@
|
|||
const { PrismaClient } = require("@prisma/client");
|
||||
const prisma = new PrismaClient();
|
||||
|
||||
async function createTags(req, res) {
|
||||
const { name, blogIDs, blogs } = req.body;
|
||||
try {
|
||||
const newTag = await prisma.Tag.create({
|
||||
data: {
|
||||
name,
|
||||
blogIDs,
|
||||
blogs,
|
||||
},
|
||||
});
|
||||
res.status(201).json(newTag);
|
||||
} catch (error) {
|
||||
console.error("Error creating comment:", error);
|
||||
res.status(500).json({ message: "Error creating blog" });
|
||||
}
|
||||
}
|
||||
async function getTags(req, res) {
|
||||
try {
|
||||
const Tags = await prisma.Tag.findMany();
|
||||
res.json(Tags);
|
||||
} catch (error) {
|
||||
console.error("Error getting blogs:", error);
|
||||
res
|
||||
.status(500)
|
||||
.json({ message: "Error getting blogs", error: error.message });
|
||||
}
|
||||
}
|
||||
|
||||
async function updateTags(req, res) {
|
||||
const { name, blog, blogIDs } = req.body;
|
||||
const id = req.params.id;
|
||||
try {
|
||||
const Tags = await prisma.Tag.findUnique({
|
||||
where: { id },
|
||||
});
|
||||
if (!Tags) {
|
||||
return res.status(404).send({
|
||||
message: "Comment not found",
|
||||
});
|
||||
}
|
||||
const updatedTags = await prisma.Tag.update({
|
||||
where: { id },
|
||||
data: {
|
||||
name,
|
||||
blog,
|
||||
blogIDs,
|
||||
},
|
||||
});
|
||||
|
||||
res.status(200).send(updatedTags);
|
||||
} catch (error) {
|
||||
console.error("Error updating Tag:", error);
|
||||
res.status(500).send({
|
||||
message: "Error updating Tag",
|
||||
error: error.message,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
async function deleteTags(req, res) {
|
||||
const { id } = req.params;
|
||||
try {
|
||||
const delTag = await prisma.Tag.delete({
|
||||
where: { id },
|
||||
});
|
||||
res.json(delTag);
|
||||
} catch (error) {
|
||||
console.error("Error getting blogs:", error);
|
||||
res
|
||||
.status(500)
|
||||
.json({ message: "Error getting blogs", error: error.message });
|
||||
}
|
||||
}
|
||||
module.exports = {
|
||||
createTags,
|
||||
getTags,
|
||||
updateTags,
|
||||
deleteTags,
|
||||
};
|
57
index.js
Normal file
|
@ -0,0 +1,57 @@
|
|||
// const { PrismaClient } = require('@prisma/client');
|
||||
// const prisma = new PrismaClient();
|
||||
|
||||
|
||||
// async function main() {
|
||||
|
||||
// await prisma.blog.create({
|
||||
// data: {
|
||||
// slug: 'Hello World-90',
|
||||
// title: 'It is working',
|
||||
// body: 'Hello It is working...',
|
||||
// categoryIDs: [],
|
||||
// tagIDs: [],
|
||||
// },
|
||||
// })
|
||||
|
||||
// const allBlogs = await prisma.blog.findMany({
|
||||
// include: {
|
||||
// comments: true,
|
||||
// categories: true,
|
||||
// tags: true,
|
||||
// },
|
||||
// })
|
||||
|
||||
// console.dir(allBlogs, { depth: null })
|
||||
// }
|
||||
// main()
|
||||
// .catch(async (e) => {
|
||||
// console.error(e)
|
||||
// process.exit(1)
|
||||
// })
|
||||
// .finally(async () => {
|
||||
// await prisma.$disconnect()
|
||||
// })
|
||||
// async function createBlog(data) {
|
||||
// return await prisma.blog.create({ data });
|
||||
// }
|
||||
|
||||
// async function getBlogs() {
|
||||
// return await prisma.blog.findMany({
|
||||
// include: { comments: true, categories: true, tags: true },
|
||||
// });
|
||||
// }
|
||||
|
||||
// async function updateBlog(id, data) {
|
||||
// return await prisma.blog.update({
|
||||
// where: { id },
|
||||
// data,
|
||||
// });
|
||||
// }
|
||||
|
||||
// async function deleteBlog(id) {
|
||||
// return await prisma.blog.delete({ where: { id } });
|
||||
// }
|
||||
|
||||
// module.exports = { createBlog, getBlogs, updateBlog, deleteBlog };
|
||||
|
35
middlewares/upload.js
Normal file
|
@ -0,0 +1,35 @@
|
|||
const multer = require("multer");
|
||||
const path = require("path");
|
||||
|
||||
const storage = multer.diskStorage({
|
||||
destination: function (req, file, cb) {
|
||||
cb(null, "uploads/");
|
||||
},
|
||||
filename: function (req, file, cb) {
|
||||
cb(null, `${Date.now()}-${file.originalname}`);
|
||||
},
|
||||
});
|
||||
|
||||
const upload = multer({
|
||||
storage: storage,
|
||||
limits: { fileSize: 1000000 },
|
||||
fileFilter: function (req, file, cb) {
|
||||
checkFileType(file, cb);
|
||||
},
|
||||
});
|
||||
|
||||
function checkFileType(file, cb) {
|
||||
const filetypes = /jpeg|jpg|png|gif|csv/;
|
||||
const extname = filetypes.test(path.extname(file.originalname).toLowerCase());
|
||||
const mimetype = filetypes.test(file.mimetype);
|
||||
console.log(mimetype);
|
||||
console.log(extname);
|
||||
|
||||
if (mimetype && extname) {
|
||||
return cb(null, true);
|
||||
} else {
|
||||
cb("Error: Images and CSV's Only!");
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = upload;
|
1790
package-lock.json
generated
Normal file
26
package.json
Normal file
|
@ -0,0 +1,26 @@
|
|||
{
|
||||
"name": "blog-crud",
|
||||
"version": "1.0.0",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"start": "nodemon src/server.js",
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
},
|
||||
"keywords": [],
|
||||
"author": "",
|
||||
"license": "ISC",
|
||||
"description": "",
|
||||
"dependencies": {
|
||||
"@prisma/client": "^6.2.1",
|
||||
"body-parser": "^1.20.3",
|
||||
"csv-parser": "^3.1.0",
|
||||
"ejs": "^3.1.10",
|
||||
"express": "^4.21.2",
|
||||
"fs": "^0.0.1-security",
|
||||
"joi": "^17.13.3",
|
||||
"mongodb": "^6.12.0",
|
||||
"multer": "^1.4.5-lts.1",
|
||||
"nodemon": "^3.1.9",
|
||||
"prisma": "^6.2.1"
|
||||
}
|
||||
}
|
48
prisma/schema.prisma
Normal file
|
@ -0,0 +1,48 @@
|
|||
// This is your Prisma schema file,
|
||||
// learn more about it in the docs: https://pris.ly/d/prisma-schema
|
||||
|
||||
// Looking for ways to speed up your queries, or scale easily with your serverless or edge functions?
|
||||
// Try Prisma Accelerate: https://pris.ly/cli/accelerate-init
|
||||
|
||||
generator client {
|
||||
provider = "prisma-client-js"
|
||||
}
|
||||
|
||||
datasource db {
|
||||
provider = "mongodb"
|
||||
url = env("DATABASE_URL")
|
||||
}
|
||||
|
||||
model Blog {
|
||||
id String @id @default(auto()) @map("_id") @db.ObjectId
|
||||
slug String @unique
|
||||
title String
|
||||
body String
|
||||
comments Comment[]
|
||||
coverImage String?
|
||||
categoryIDs String[] @db.ObjectId
|
||||
categories Category[] @relation(fields: [categoryIDs], references: [id])
|
||||
tagIDs String[] @db.ObjectId
|
||||
tags Tag[] @relation(fields: [tagIDs], references: [id])
|
||||
}
|
||||
|
||||
model Comment {
|
||||
id String @id @default(auto()) @map("_id") @db.ObjectId
|
||||
comment String
|
||||
blog Blog @relation(fields: [blogId], references: [id])
|
||||
blogId String @db.ObjectId
|
||||
}
|
||||
|
||||
model Category {
|
||||
id String @id @default(auto()) @map("_id") @db.ObjectId
|
||||
name String
|
||||
blogIDs String[] @db.ObjectId
|
||||
blogs Blog[] @relation(fields: [blogIDs], references: [id])
|
||||
}
|
||||
|
||||
model Tag {
|
||||
id String @id @default(auto()) @map("_id") @db.ObjectId
|
||||
name String
|
||||
blogIDs String[] @db.ObjectId
|
||||
blogs Blog[] @relation(fields: [blogIDs], references: [id])
|
||||
}
|
92
src/server.js
Normal file
|
@ -0,0 +1,92 @@
|
|||
const express = require("express");
|
||||
const bodyParser = require("body-parser");
|
||||
const upload = require('../middlewares/upload');
|
||||
const blogUserValidater = require('../validations/blogValidations');
|
||||
const commentValidater = require('../validations/commentsValidation');
|
||||
const categoryValidater = require('../validations/categoryValidation');
|
||||
const tagValidater = require('../validations/tagValidation');
|
||||
|
||||
const {
|
||||
createBlog,
|
||||
getBlogs,
|
||||
updateBlog,
|
||||
deleteBlog,
|
||||
} = require("../controller/blog.controller");
|
||||
|
||||
const {
|
||||
createComments,
|
||||
getComments,
|
||||
updateComments,
|
||||
deleteComments,
|
||||
} = require("../controller/comments.controller");
|
||||
|
||||
const {
|
||||
createTags,
|
||||
getTags,
|
||||
updateTags,
|
||||
deleteTags,
|
||||
} = require("../controller/tags.controller");
|
||||
|
||||
const {
|
||||
createCategory,
|
||||
getCategory,
|
||||
updateCategory,
|
||||
deleteCategory,
|
||||
} = require("../controller/category.controller");
|
||||
const { bulkUploadBlogs } = require("../controller/bulkUpload.controller");
|
||||
|
||||
|
||||
|
||||
|
||||
const app = express();
|
||||
app.use(bodyParser.json());
|
||||
const PORT = 3000;
|
||||
|
||||
//-----------------------------Blogs-----------------------------
|
||||
|
||||
app.post("/blogs", upload.single("coverImage"), blogUserValidater, createBlog);
|
||||
|
||||
app.get("/api/blogs", getBlogs);
|
||||
|
||||
app.put("/api/blogs/:id", updateBlog);
|
||||
|
||||
app.delete("/api/blogs/:id", deleteBlog);
|
||||
|
||||
app.post("/api/blogs/bulkBlog", upload.single("file"), bulkUploadBlogs);
|
||||
|
||||
//-----------------------------Comments-----------------------------
|
||||
|
||||
app.post("/api/comment", commentValidater, createComments);
|
||||
|
||||
app.get("/api/comment", getComments);
|
||||
|
||||
app.put("/api/comment/:id", updateComments);
|
||||
|
||||
app.delete("/api/comment/:id", deleteComments);
|
||||
|
||||
//-----------------------------Categories-----------------------------
|
||||
|
||||
app.post("/api/category", categoryValidater, createCategory);
|
||||
|
||||
app.get("/api/category", getCategory);
|
||||
|
||||
app.put("/api/category/:id", updateCategory);
|
||||
|
||||
app.delete("/api/category/:id", deleteCategory);
|
||||
|
||||
//-----------------------------Tags-----------------------------
|
||||
|
||||
app.post("/api/tags", tagValidater, createTags);
|
||||
|
||||
app.get("/api/tags", getTags);
|
||||
|
||||
app.put("/api/tags/:id", updateTags);
|
||||
|
||||
app.delete("/api/tags/:id", deleteTags);
|
||||
|
||||
|
||||
app.listen(PORT, () => {
|
||||
console.log(
|
||||
`Your Server is Successfully running on http://localhost:${PORT} `
|
||||
);
|
||||
});
|
BIN
uploads/1737628927268-download (1).jpeg
Normal file
After Width: | Height: | Size: 6.7 KiB |
BIN
uploads/1737629142688-download (1).jpeg
Normal file
After Width: | Height: | Size: 6.7 KiB |
BIN
uploads/1737629172138-download (1).jpeg
Normal file
After Width: | Height: | Size: 6.7 KiB |
BIN
uploads/1737629232745-download (1).jpeg
Normal file
After Width: | Height: | Size: 6.7 KiB |
BIN
uploads/1737629242221-download (1).jpeg
Normal file
After Width: | Height: | Size: 6.7 KiB |
BIN
uploads/1737629298157-download (1).jpeg
Normal file
After Width: | Height: | Size: 6.7 KiB |
BIN
uploads/1737629800648-download (1).jpeg
Normal file
After Width: | Height: | Size: 6.7 KiB |
BIN
uploads/1737630243373-download (1).jpeg
Normal file
After Width: | Height: | Size: 6.7 KiB |
BIN
uploads/1737630729905-download (1).jpeg
Normal file
After Width: | Height: | Size: 6.7 KiB |
21
uploads/1737632170533-MOCK_DATA.csv
Normal file
|
@ -0,0 +1,21 @@
|
|||
slug,title,body,categoryIDs,tagIDs
|
||||
placerat praesent blandit nam nulla integer pede justo lacinia,a odio in hac habitasse platea dictumst maecenas ut,risus praesent lectus vestibulum quam sapien varius ut blandit non interdum in ante vestibulum ante ipsum,679228dffc13ae5ec37955d5,679228dffc13ae5ec37955d6
|
||||
etiam faucibus cursus urna ut tellus nulla,magna bibendum imperdiet nullam orci pede venenatis non sodales sed,pretium iaculis justo in hac habitasse platea dictumst etiam faucibus cursus urna ut tellus nulla ut erat id mauris vulputate,679228dffc13ae5ec37955d7,679228dffc13ae5ec37955d8
|
||||
at velit eu est congue,duis at velit eu est congue elementum,mi in porttitor pede justo eu massa donec dapibus duis at,679228dffc13ae5ec37955d9,679228dffc13ae5ec37955da
|
||||
posuere nonummy integer non velit donec diam neque,dolor vel est donec odio justo sollicitudin ut suscipit a,duis bibendum morbi non quam nec dui luctus rutrum nulla tellus in sagittis dui vel nisl duis ac nibh fusce,679228e0fc13ae5ec37955db,679228e0fc13ae5ec37955dc
|
||||
nulla integer pede justo lacinia eget tincidunt eget,vulputate luctus cum sociis natoque penatibus et,non sodales sed tincidunt eu felis fusce posuere felis sed,679228e0fc13ae5ec37955dd,679228e0fc13ae5ec37955de
|
||||
ultrices libero non mattis pulvinar nulla pede,a suscipit nulla elit ac nulla sed vel enim sit,vulputate nonummy maecenas tincidunt lacus at velit vivamus vel nulla,679228e0fc13ae5ec37955df,679228e0fc13ae5ec37955e0
|
||||
sit amet nulla quisque arcu libero rutrum ac,vel nisl duis ac nibh,congue eget semper rutrum nulla nunc purus phasellus in felis donec semper sapien a libero nam dui proin leo odio,679228e0fc13ae5ec37955e1,679228e0fc13ae5ec37955e2
|
||||
amet sapien dignissim vestibulum vestibulum ante ipsum primis,nibh in lectus pellentesque at nulla suspendisse potenti cras,vestibulum ac est lacinia nisi venenatis tristique fusce congue diam id ornare imperdiet sapien urna pretium nisl,679228e0fc13ae5ec37955e3,679228e0fc13ae5ec37955e4
|
||||
risus auctor sed tristique in,et ultrices posuere cubilia curae nulla dapibus dolor vel est,quisque erat eros viverra eget congue eget semper rutrum nulla,679228e0fc13ae5ec37955e5,679228e0fc13ae5ec37955e6
|
||||
sit amet eros suspendisse accumsan tortor quis turpis sed,congue elementum in hac habitasse platea,diam erat fermentum justo nec condimentum neque sapien placerat ante nulla justo aliquam quis turpis eget elit sodales scelerisque,679228e0fc13ae5ec37955e7,679228e0fc13ae5ec37955e8
|
||||
ut nunc vestibulum ante ipsum primis,vestibulum sit amet cursus id turpis integer aliquet,porttitor lorem id ligula suspendisse ornare consequat lectus in est risus auctor,679228e0fc13ae5ec37955e9,679228e0fc13ae5ec37955ea
|
||||
rhoncus mauris enim leo rhoncus sed,mi sit amet lobortis sapien sapien non mi,consequat morbi a ipsum integer a nibh in quis justo maecenas rhoncus aliquam lacus morbi quis tortor,679228e0fc13ae5ec37955eb,679228e0fc13ae5ec37955ec
|
||||
hac habitasse platea dictumst morbi vestibulum velit id pretium,libero quis orci nullam molestie,sed justo pellentesque viverra pede ac diam cras pellentesque volutpat dui maecenas tristique est et tempus semper est,679228e0fc13ae5ec37955ed,679228e0fc13ae5ec37955ee
|
||||
duis at velit eu est congue elementum in,integer a nibh in quis justo maecenas rhoncus,nulla tellus in sagittis dui vel nisl duis ac nibh fusce lacus purus aliquet at feugiat non pretium,679228e0fc13ae5ec37955ef,679228e0fc13ae5ec37955f0
|
||||
elit ac nulla sed vel enim,ante nulla justo aliquam quis turpis eget elit,ipsum dolor sit amet consectetuer adipiscing elit proin interdum mauris non ligula pellentesque ultrices phasellus id,679228e0fc13ae5ec37955f1,679228e0fc13ae5ec37955f2
|
||||
enim blandit mi in porttitor pede justo,quis augue luctus tincidunt nulla mollis molestie lorem quisque ut,turpis sed ante vivamus tortor duis mattis egestas metus aenean fermentum donec ut mauris eget massa tempor convallis,679228e0fc13ae5ec37955f3,679228e0fc13ae5ec37955f4
|
||||
ipsum primis in faucibus orci,augue quam sollicitudin vitae consectetuer,lorem id ligula suspendisse ornare consequat lectus in est risus auctor sed tristique,679228e0fc13ae5ec37955f5,679228e0fc13ae5ec37955f6
|
||||
quam a odio in hac habitasse platea,dui proin leo odio porttitor id,turpis enim blandit mi in porttitor pede justo eu massa donec dapibus duis at velit eu est congue elementum in,679228e0fc13ae5ec37955f7,679228e0fc13ae5ec37955f8
|
||||
tellus nisi eu orci mauris lacinia sapien quis libero nullam,ornare imperdiet sapien urna pretium,non sodales sed tincidunt eu felis fusce posuere felis sed lacus morbi sem,679228e0fc13ae5ec37955f9,679228e0fc13ae5ec37955fa
|
||||
morbi porttitor lorem id ligula suspendisse ornare consequat lectus,rhoncus sed vestibulum sit amet cursus id,nibh in lectus pellentesque at nulla suspendisse potenti cras in purus eu magna vulputate luctus cum sociis natoque,679228e0fc13ae5ec37955fb,679228e0fc13ae5ec37955fc
|
|
BIN
uploads/1737637127609-Screenshot from 2024-12-24 14-48-08.png
Normal file
After Width: | Height: | Size: 2.2 KiB |
BIN
uploads/1737637141197-Screenshot from 2024-12-24 14-48-08.png
Normal file
After Width: | Height: | Size: 2.2 KiB |
BIN
uploads/1737637176814-Screenshot from 2024-12-24 14-48-08.png
Normal file
After Width: | Height: | Size: 2.2 KiB |
BIN
uploads/1737692108518-Screenshot from 2024-12-24 14-48-08.png
Normal file
After Width: | Height: | Size: 2.2 KiB |
11
uploads/1737693201009-MOCK_DATA (1).csv
Normal file
|
@ -0,0 +1,11 @@
|
|||
slug,title,body,catrgoryIDs,tagIDs
|
||||
eros viverra eget congue eget semper rutrum nulla nunc,pretium iaculis justo in hac habitasse,volutpat eleifend donec ut dolor morbi vel lectus in quam,679314e7fc13ae62bb9b57f2,679314e7fc13ae62bb9b57f3
|
||||
accumsan tellus nisi eu orci,eu est congue elementum in hac,volutpat sapien arcu sed augue aliquam erat volutpat in congue etiam justo etiam pretium,679314e7fc13ae62bb9b57f4,679314e7fc13ae62bb9b57f5
|
||||
congue vivamus metus arcu adipiscing molestie hendrerit at vulputate,penatibus et magnis dis parturient,maecenas tristique est et tempus semper est quam pharetra magna ac consequat,679314e7fc13ae62bb9b57f6,679314e7fc13ae62bb9b57f7
|
||||
id luctus nec molestie sed justo pellentesque,in magna bibendum imperdiet nullam,volutpat sapien arcu sed augue aliquam erat volutpat in congue etiam justo etiam pretium iaculis justo in hac habitasse platea,679314e7fc13ae62bb9b57f8,679314e7fc13ae62bb9b57f9
|
||||
augue vestibulum rutrum rutrum neque aenean auctor gravida sem,integer a nibh in quis justo maecenas rhoncus,eget eros elementum pellentesque quisque porta volutpat erat quisque erat eros viverra eget,679314e7fc13ae62bb9b57fa,679314e7fc13ae62bb9b57fb
|
||||
ipsum primis in faucibus orci,in lectus pellentesque at nulla suspendisse potenti,velit vivamus vel nulla eget eros elementum pellentesque quisque porta volutpat erat quisque erat eros viverra eget congue,679314e7fc13ae62bb9b57fc,679314e7fc13ae62bb9b57fd
|
||||
est congue elementum in hac habitasse platea dictumst morbi vestibulum,ut massa quis augue luctus tincidunt,libero quis orci nullam molestie nibh in lectus pellentesque at nulla suspendisse potenti cras,679314e7fc13ae62bb9b57fe,679314e7fc13ae62bb9b57ff
|
||||
sit amet sapien dignissim vestibulum vestibulum,eros vestibulum ac est lacinia nisi venenatis tristique,sem duis aliquam convallis nunc proin at turpis a pede,679314e7fc13ae62bb9b5800,679314e7fc13ae62bb9b5801
|
||||
sit amet cursus id turpis integer aliquet massa,convallis tortor risus dapibus augue vel accumsan tellus,vulputate elementum nullam varius nulla facilisi cras non velit nec nisi vulputate nonummy maecenas,679314e7fc13ae62bb9b5802,679314e7fc13ae62bb9b5803
|
||||
suspendisse potenti cras in purus eu magna vulputate,pulvinar sed nisl nunc rhoncus dui vel sem,habitasse platea dictumst etiam faucibus cursus urna ut tellus nulla ut erat id mauris vulputate elementum nullam varius,679314e7fc13ae62bb9b5804,679314e7fc13ae62bb9b5805
|
|
11
uploads/1737693225033-MOCK_DATA (1).csv
Normal file
|
@ -0,0 +1,11 @@
|
|||
slug,title,body,catrgoryIDs,tagIDs
|
||||
eros viverra eget congue eget semper rutrum nulla nunc,pretium iaculis justo in hac habitasse,volutpat eleifend donec ut dolor morbi vel lectus in quam,679314e7fc13ae62bb9b57f2,679314e7fc13ae62bb9b57f3
|
||||
accumsan tellus nisi eu orci,eu est congue elementum in hac,volutpat sapien arcu sed augue aliquam erat volutpat in congue etiam justo etiam pretium,679314e7fc13ae62bb9b57f4,679314e7fc13ae62bb9b57f5
|
||||
congue vivamus metus arcu adipiscing molestie hendrerit at vulputate,penatibus et magnis dis parturient,maecenas tristique est et tempus semper est quam pharetra magna ac consequat,679314e7fc13ae62bb9b57f6,679314e7fc13ae62bb9b57f7
|
||||
id luctus nec molestie sed justo pellentesque,in magna bibendum imperdiet nullam,volutpat sapien arcu sed augue aliquam erat volutpat in congue etiam justo etiam pretium iaculis justo in hac habitasse platea,679314e7fc13ae62bb9b57f8,679314e7fc13ae62bb9b57f9
|
||||
augue vestibulum rutrum rutrum neque aenean auctor gravida sem,integer a nibh in quis justo maecenas rhoncus,eget eros elementum pellentesque quisque porta volutpat erat quisque erat eros viverra eget,679314e7fc13ae62bb9b57fa,679314e7fc13ae62bb9b57fb
|
||||
ipsum primis in faucibus orci,in lectus pellentesque at nulla suspendisse potenti,velit vivamus vel nulla eget eros elementum pellentesque quisque porta volutpat erat quisque erat eros viverra eget congue,679314e7fc13ae62bb9b57fc,679314e7fc13ae62bb9b57fd
|
||||
est congue elementum in hac habitasse platea dictumst morbi vestibulum,ut massa quis augue luctus tincidunt,libero quis orci nullam molestie nibh in lectus pellentesque at nulla suspendisse potenti cras,679314e7fc13ae62bb9b57fe,679314e7fc13ae62bb9b57ff
|
||||
sit amet sapien dignissim vestibulum vestibulum,eros vestibulum ac est lacinia nisi venenatis tristique,sem duis aliquam convallis nunc proin at turpis a pede,679314e7fc13ae62bb9b5800,679314e7fc13ae62bb9b5801
|
||||
sit amet cursus id turpis integer aliquet massa,convallis tortor risus dapibus augue vel accumsan tellus,vulputate elementum nullam varius nulla facilisi cras non velit nec nisi vulputate nonummy maecenas,679314e7fc13ae62bb9b5802,679314e7fc13ae62bb9b5803
|
||||
suspendisse potenti cras in purus eu magna vulputate,pulvinar sed nisl nunc rhoncus dui vel sem,habitasse platea dictumst etiam faucibus cursus urna ut tellus nulla ut erat id mauris vulputate elementum nullam varius,679314e7fc13ae62bb9b5804,679314e7fc13ae62bb9b5805
|
|
11
uploads/1737693310499-MOCK_DATA (1).csv
Normal file
|
@ -0,0 +1,11 @@
|
|||
slug,title,body,catrgoryIDs,tagIDs
|
||||
eros viverra eget congue eget semper rutrum nulla nunc,pretium iaculis justo in hac habitasse,volutpat eleifend donec ut dolor morbi vel lectus in quam,679314e7fc13ae62bb9b57f2,679314e7fc13ae62bb9b57f3
|
||||
accumsan tellus nisi eu orci,eu est congue elementum in hac,volutpat sapien arcu sed augue aliquam erat volutpat in congue etiam justo etiam pretium,679314e7fc13ae62bb9b57f4,679314e7fc13ae62bb9b57f5
|
||||
congue vivamus metus arcu adipiscing molestie hendrerit at vulputate,penatibus et magnis dis parturient,maecenas tristique est et tempus semper est quam pharetra magna ac consequat,679314e7fc13ae62bb9b57f6,679314e7fc13ae62bb9b57f7
|
||||
id luctus nec molestie sed justo pellentesque,in magna bibendum imperdiet nullam,volutpat sapien arcu sed augue aliquam erat volutpat in congue etiam justo etiam pretium iaculis justo in hac habitasse platea,679314e7fc13ae62bb9b57f8,679314e7fc13ae62bb9b57f9
|
||||
augue vestibulum rutrum rutrum neque aenean auctor gravida sem,integer a nibh in quis justo maecenas rhoncus,eget eros elementum pellentesque quisque porta volutpat erat quisque erat eros viverra eget,679314e7fc13ae62bb9b57fa,679314e7fc13ae62bb9b57fb
|
||||
ipsum primis in faucibus orci,in lectus pellentesque at nulla suspendisse potenti,velit vivamus vel nulla eget eros elementum pellentesque quisque porta volutpat erat quisque erat eros viverra eget congue,679314e7fc13ae62bb9b57fc,679314e7fc13ae62bb9b57fd
|
||||
est congue elementum in hac habitasse platea dictumst morbi vestibulum,ut massa quis augue luctus tincidunt,libero quis orci nullam molestie nibh in lectus pellentesque at nulla suspendisse potenti cras,679314e7fc13ae62bb9b57fe,679314e7fc13ae62bb9b57ff
|
||||
sit amet sapien dignissim vestibulum vestibulum,eros vestibulum ac est lacinia nisi venenatis tristique,sem duis aliquam convallis nunc proin at turpis a pede,679314e7fc13ae62bb9b5800,679314e7fc13ae62bb9b5801
|
||||
sit amet cursus id turpis integer aliquet massa,convallis tortor risus dapibus augue vel accumsan tellus,vulputate elementum nullam varius nulla facilisi cras non velit nec nisi vulputate nonummy maecenas,679314e7fc13ae62bb9b5802,679314e7fc13ae62bb9b5803
|
||||
suspendisse potenti cras in purus eu magna vulputate,pulvinar sed nisl nunc rhoncus dui vel sem,habitasse platea dictumst etiam faucibus cursus urna ut tellus nulla ut erat id mauris vulputate elementum nullam varius,679314e7fc13ae62bb9b5804,679314e7fc13ae62bb9b5805
|
|
11
uploads/1737693502924-MOCK_DATA (2).csv
Normal file
|
@ -0,0 +1,11 @@
|
|||
slug,title,body,categoryIDs,tagIDs
|
||||
tortor duis mattis egestas metus aenean fermentum donec ut mauris eget massa tempor convallis nulla neque libero convallis eget,tortor sollicitudin mi sit amet lobortis sapien sapien non mi,iaculis congue vivamus metus arcu adipiscing molestie hendrerit at vulputate vitae nisl aenean lectus pellentesque eget nunc donec quis orci,67931922fc13ae66029b57f2,67931922fc13ae66029b57f3
|
||||
velit id pretium iaculis diam erat fermentum justo nec condimentum neque sapien placerat ante nulla justo aliquam quis,eget massa tempor convallis nulla neque libero convallis eget eleifend luctus ultricies eu nibh quisque id justo sit,rutrum nulla nunc purus phasellus in felis donec semper sapien a libero nam dui proin leo odio porttitor id consequat,67931922fc13ae66029b57f4,67931922fc13ae66029b57f5
|
||||
fringilla rhoncus mauris enim leo rhoncus sed vestibulum sit amet cursus id turpis integer,sodales sed tincidunt eu felis fusce posuere felis sed lacus morbi sem mauris laoreet ut rhoncus aliquet pulvinar sed nisl,ligula vehicula consequat morbi a ipsum integer a nibh in quis justo maecenas rhoncus aliquam lacus morbi quis tortor id nulla ultrices aliquet maecenas leo odio,67931922fc13ae66029b57f6,67931922fc13ae66029b57f7
|
||||
curae nulla dapibus dolor vel est donec odio justo sollicitudin ut suscipit a feugiat et eros vestibulum ac est,rutrum rutrum neque aenean auctor gravida sem praesent id massa id nisl,tellus nisi eu orci mauris lacinia sapien quis libero nullam sit amet turpis elementum ligula vehicula consequat morbi a ipsum integer a nibh in quis,67931922fc13ae66029b57f8,67931922fc13ae66029b57f9
|
||||
lobortis est phasellus sit amet erat nulla tempus vivamus in felis eu sapien cursus vestibulum proin eu mi nulla,feugiat non pretium quis lectus suspendisse potenti in eleifend quam a odio in hac habitasse platea,turpis enim blandit mi in porttitor pede justo eu massa donec dapibus duis at velit eu est congue elementum in hac habitasse platea,67931922fc13ae66029b57fa,67931922fc13ae66029b57fb
|
||||
vulputate nonummy maecenas tincidunt lacus at velit vivamus vel nulla eget eros elementum pellentesque quisque porta volutpat erat quisque erat,eget vulputate ut ultrices vel augue vestibulum ante ipsum primis in,posuere metus vitae ipsum aliquam non mauris morbi non lectus aliquam sit amet diam in magna bibendum imperdiet nullam orci pede venenatis non sodales sed tincidunt eu felis fusce,67931922fc13ae66029b57fc,67931922fc13ae66029b57fd
|
||||
maecenas tincidunt lacus at velit vivamus vel nulla eget eros elementum pellentesque quisque porta volutpat erat quisque erat,dictumst maecenas ut massa quis augue luctus tincidunt nulla mollis molestie lorem quisque ut erat curabitur gravida,odio in hac habitasse platea dictumst maecenas ut massa quis augue luctus tincidunt nulla mollis molestie lorem quisque ut erat curabitur gravida nisi at nibh in hac habitasse,67931922fc13ae66029b57fe,67931922fc13ae66029b57ff
|
||||
sapien sapien non mi integer ac neque duis bibendum morbi non quam nec dui,velit vivamus vel nulla eget eros elementum pellentesque quisque porta volutpat erat quisque,in imperdiet et commodo vulputate justo in blandit ultrices enim lorem ipsum dolor sit amet consectetuer adipiscing elit proin interdum mauris non ligula pellentesque,67931922fc13ae66029b5800,67931922fc13ae66029b5801
|
||||
elit proin risus praesent lectus vestibulum quam sapien varius ut blandit non interdum,semper porta volutpat quam pede lobortis ligula sit amet eleifend pede libero quis orci nullam molestie nibh,pede justo eu massa donec dapibus duis at velit eu est congue elementum in hac habitasse platea dictumst morbi vestibulum velit id pretium iaculis diam erat fermentum justo nec,67931922fc13ae66029b5802,67931922fc13ae66029b5803
|
||||
mattis pulvinar nulla pede ullamcorper augue a suscipit nulla elit ac,justo morbi ut odio cras mi pede malesuada in imperdiet et commodo vulputate justo in blandit,mattis odio donec vitae nisi nam ultrices libero non mattis pulvinar nulla pede ullamcorper augue a suscipit nulla elit ac nulla sed,67931922fc13ae66029b5804,67931922fc13ae66029b5805
|
|
11
uploads/1737695105928-MOCK_DATA (1).csv
Normal file
|
@ -0,0 +1,11 @@
|
|||
slug,title,body,catrgoryIDs,tagIDs
|
||||
eros viverra eget congue eget semper rutrum nulla nunc,pretium iaculis justo in hac habitasse,volutpat eleifend donec ut dolor morbi vel lectus in quam,679314e7fc13ae62bb9b57f2,679314e7fc13ae62bb9b57f3
|
||||
accumsan tellus nisi eu orci,eu est congue elementum in hac,volutpat sapien arcu sed augue aliquam erat volutpat in congue etiam justo etiam pretium,679314e7fc13ae62bb9b57f4,679314e7fc13ae62bb9b57f5
|
||||
congue vivamus metus arcu adipiscing molestie hendrerit at vulputate,penatibus et magnis dis parturient,maecenas tristique est et tempus semper est quam pharetra magna ac consequat,679314e7fc13ae62bb9b57f6,679314e7fc13ae62bb9b57f7
|
||||
id luctus nec molestie sed justo pellentesque,in magna bibendum imperdiet nullam,volutpat sapien arcu sed augue aliquam erat volutpat in congue etiam justo etiam pretium iaculis justo in hac habitasse platea,679314e7fc13ae62bb9b57f8,679314e7fc13ae62bb9b57f9
|
||||
augue vestibulum rutrum rutrum neque aenean auctor gravida sem,integer a nibh in quis justo maecenas rhoncus,eget eros elementum pellentesque quisque porta volutpat erat quisque erat eros viverra eget,679314e7fc13ae62bb9b57fa,679314e7fc13ae62bb9b57fb
|
||||
ipsum primis in faucibus orci,in lectus pellentesque at nulla suspendisse potenti,velit vivamus vel nulla eget eros elementum pellentesque quisque porta volutpat erat quisque erat eros viverra eget congue,679314e7fc13ae62bb9b57fc,679314e7fc13ae62bb9b57fd
|
||||
est congue elementum in hac habitasse platea dictumst morbi vestibulum,ut massa quis augue luctus tincidunt,libero quis orci nullam molestie nibh in lectus pellentesque at nulla suspendisse potenti cras,679314e7fc13ae62bb9b57fe,679314e7fc13ae62bb9b57ff
|
||||
sit amet sapien dignissim vestibulum vestibulum,eros vestibulum ac est lacinia nisi venenatis tristique,sem duis aliquam convallis nunc proin at turpis a pede,679314e7fc13ae62bb9b5800,679314e7fc13ae62bb9b5801
|
||||
sit amet cursus id turpis integer aliquet massa,convallis tortor risus dapibus augue vel accumsan tellus,vulputate elementum nullam varius nulla facilisi cras non velit nec nisi vulputate nonummy maecenas,679314e7fc13ae62bb9b5802,679314e7fc13ae62bb9b5803
|
||||
suspendisse potenti cras in purus eu magna vulputate,pulvinar sed nisl nunc rhoncus dui vel sem,habitasse platea dictumst etiam faucibus cursus urna ut tellus nulla ut erat id mauris vulputate elementum nullam varius,679314e7fc13ae62bb9b5804,679314e7fc13ae62bb9b5805
|
|
11
uploads/1737695157382-MOCK_DATA (3).csv
Normal file
|
@ -0,0 +1,11 @@
|
|||
slug,title,body,categoryIDs,tagIDs
|
||||
odio porttitor id consequat in consequat ut nulla sed accumsan felis ut,lacinia eget tincidunt eget tempus vel pede morbi porttitor lorem id ligula suspendisse ornare consequat lectus,habitasse platea dictumst maecenas ut massa quis augue luctus tincidunt nulla mollis molestie lorem quisque ut erat curabitur gravida nisi at nibh in hac,67931fa1fc13ae64a69b57f2,67931fa1fc13ae64a69b57f3
|
||||
in blandit ultrices enim lorem ipsum dolor sit amet consectetuer adipiscing elit proin interdum,ut erat curabitur gravida nisi at nibh in hac habitasse platea,ultrices posuere cubilia curae nulla dapibus dolor vel est donec odio justo sollicitudin ut suscipit a feugiat et eros vestibulum ac est lacinia nisi venenatis tristique fusce congue diam,67931fa1fc13ae64a69b57f4,67931fa1fc13ae64a69b57f5
|
||||
nulla nunc purus phasellus in felis donec semper sapien a libero nam dui proin leo odio porttitor,rhoncus aliquam lacus morbi quis tortor id nulla ultrices aliquet maecenas leo odio condimentum,id justo sit amet sapien dignissim vestibulum vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae nulla dapibus dolor vel est donec odio,67931fa1fc13ae64a69b57f6,67931fa1fc13ae64a69b57f7
|
||||
nullam varius nulla facilisi cras non velit nec nisi vulputate nonummy maecenas tincidunt lacus at velit vivamus vel,nisl aenean lectus pellentesque eget nunc donec quis orci eget orci vehicula condimentum curabitur,ut ultrices vel augue vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae donec pharetra magna vestibulum aliquet ultrices erat tortor sollicitudin mi sit amet lobortis,67931fa1fc13ae64a69b57f8,67931fa1fc13ae64a69b57f9
|
||||
est donec odio justo sollicitudin ut suscipit a feugiat et,nibh fusce lacus purus aliquet at feugiat non pretium quis lectus suspendisse potenti in eleifend quam a,id consequat in consequat ut nulla sed accumsan felis ut at dolor quis odio consequat varius integer ac leo pellentesque ultrices mattis,67931fa1fc13ae64a69b57fa,67931fa1fc13ae64a69b57fb
|
||||
vel pede morbi porttitor lorem id ligula suspendisse ornare consequat lectus in est risus,sit amet erat nulla tempus vivamus in felis eu sapien cursus vestibulum proin eu mi,purus phasellus in felis donec semper sapien a libero nam dui proin leo odio porttitor id consequat in consequat ut nulla sed accumsan felis ut,67931fa1fc13ae64a69b57fc,67931fa1fc13ae64a69b57fd
|
||||
blandit lacinia erat vestibulum sed magna at nunc commodo placerat praesent blandit nam nulla integer,pede libero quis orci nullam molestie nibh in lectus pellentesque at nulla suspendisse potenti,morbi odio odio elementum eu interdum eu tincidunt in leo maecenas pulvinar lobortis est phasellus sit amet erat nulla tempus vivamus in felis eu sapien cursus vestibulum proin eu,67931fa1fc13ae64a69b57fe,67931fa1fc13ae64a69b57ff
|
||||
sem mauris laoreet ut rhoncus aliquet pulvinar sed nisl nunc rhoncus dui vel sem,ligula nec sem duis aliquam convallis nunc proin at turpis a pede posuere,primis in faucibus orci luctus et ultrices posuere cubilia curae donec pharetra magna vestibulum aliquet ultrices erat tortor sollicitudin mi sit amet,67931fa1fc13ae64a69b5800,67931fa1fc13ae64a69b5801
|
||||
sit amet nulla quisque arcu libero rutrum ac lobortis vel dapibus at diam,dictumst etiam faucibus cursus urna ut tellus nulla ut erat id mauris,justo aliquam quis turpis eget elit sodales scelerisque mauris sit amet eros suspendisse accumsan tortor quis turpis sed ante vivamus tortor duis,67931fa1fc13ae64a69b5802,67931fa1fc13ae64a69b5803
|
||||
quisque id justo sit amet sapien dignissim vestibulum vestibulum ante ipsum primis in faucibus,vestibulum ac est lacinia nisi venenatis tristique fusce congue diam id ornare imperdiet sapien urna pretium nisl ut,curabitur in libero ut massa volutpat convallis morbi odio odio elementum eu interdum eu tincidunt in leo maecenas pulvinar lobortis est phasellus sit,67931fa1fc13ae64a69b5804,67931fa1fc13ae64a69b5805
|
|
11
uploads/1737697820499-MOCK_DATA (4).csv
Normal file
|
@ -0,0 +1,11 @@
|
|||
slug,title,body,categoryIDs,tagIDs
|
||||
tortor risus dapibus augue vel accumsan tellus nisi eu orci mauris lacinia sapien,volutpat quam pede lobortis ligula sit amet eleifend pede libero quis orci nullam molestie nibh in lectus pellentesque at,lacus purus aliquet at feugiat non pretium quis lectus suspendisse potenti in eleifend quam a odio in hac habitasse platea dictumst maecenas ut massa quis augue,67932a05fc13ae63219b57f2,67932a05fc13ae63219b57f3
|
||||
sapien iaculis congue vivamus metus arcu adipiscing molestie hendrerit at vulputate vitae nisl aenean lectus pellentesque eget nunc,nullam varius nulla facilisi cras non velit nec nisi vulputate nonummy maecenas tincidunt lacus at,mi pede malesuada in imperdiet et commodo vulputate justo in blandit ultrices enim lorem ipsum dolor sit amet consectetuer adipiscing elit proin interdum mauris non ligula pellentesque ultrices,67932a05fc13ae63219b57f4,67932a05fc13ae63219b57f5
|
||||
vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae mauris viverra diam vitae quam,mus vivamus vestibulum sagittis sapien cum sociis natoque penatibus et magnis dis parturient,felis eu sapien cursus vestibulum proin eu mi nulla ac enim in tempor turpis nec euismod scelerisque quam turpis adipiscing,67932a05fc13ae63219b57f6,67932a05fc13ae63219b57f7
|
||||
consequat nulla nisl nunc nisl duis bibendum felis sed interdum venenatis turpis enim blandit mi in porttitor pede,in quis justo maecenas rhoncus aliquam lacus morbi quis tortor id nulla ultrices aliquet maecenas leo,amet sem fusce consequat nulla nisl nunc nisl duis bibendum felis sed interdum venenatis turpis enim blandit mi in porttitor pede justo eu massa donec dapibus duis,67932a05fc13ae63219b57f8,67932a05fc13ae63219b57f9
|
||||
ac est lacinia nisi venenatis tristique fusce congue diam id,pretium nisl ut volutpat sapien arcu sed augue aliquam erat volutpat in congue etiam justo etiam pretium iaculis justo,in tempor turpis nec euismod scelerisque quam turpis adipiscing lorem vitae mattis nibh ligula nec sem duis aliquam convallis nunc proin at turpis a pede posuere nonummy integer,67932a05fc13ae63219b57fa,67932a05fc13ae63219b57fb
|
||||
eget nunc donec quis orci eget orci vehicula condimentum curabitur in libero ut massa,ipsum dolor sit amet consectetuer adipiscing elit proin interdum mauris non ligula,in lacus curabitur at ipsum ac tellus semper interdum mauris ullamcorper purus sit amet nulla quisque arcu libero rutrum ac lobortis vel dapibus at,67932a05fc13ae63219b57fc,67932a05fc13ae63219b57fd
|
||||
lorem quisque ut erat curabitur gravida nisi at nibh in hac habitasse platea dictumst aliquam augue quam sollicitudin vitae consectetuer,ut nunc vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae mauris viverra diam,in hac habitasse platea dictumst maecenas ut massa quis augue luctus tincidunt nulla mollis molestie lorem quisque ut erat curabitur gravida nisi at nibh in hac habitasse platea,67932a05fc13ae63219b57fe,67932a05fc13ae63219b57ff
|
||||
lectus aliquam sit amet diam in magna bibendum imperdiet nullam orci pede venenatis non sodales sed tincidunt eu,nulla suspendisse potenti cras in purus eu magna vulputate luctus cum sociis natoque penatibus et,venenatis lacinia aenean sit amet justo morbi ut odio cras mi pede malesuada in imperdiet et commodo vulputate justo in blandit ultrices enim lorem ipsum dolor sit,67932a05fc13ae63219b5800,67932a05fc13ae63219b5801
|
||||
sit amet consectetuer adipiscing elit proin risus praesent lectus vestibulum quam sapien varius ut blandit non interdum in ante vestibulum,id massa id nisl venenatis lacinia aenean sit amet justo morbi ut odio cras mi pede malesuada in imperdiet et,suspendisse potenti in eleifend quam a odio in hac habitasse platea dictumst maecenas ut massa quis augue luctus tincidunt nulla mollis,67932a05fc13ae63219b5802,67932a05fc13ae63219b5803
|
||||
consectetuer adipiscing elit proin interdum mauris non ligula pellentesque ultrices phasellus id sapien in sapien iaculis,libero rutrum ac lobortis vel dapibus at diam nam tristique tortor,tempus sit amet sem fusce consequat nulla nisl nunc nisl duis bibendum felis sed interdum venenatis turpis enim blandit mi in porttitor pede justo eu massa donec dapibus,67932a05fc13ae63219b5804,67932a05fc13ae63219b5805
|
|
11
uploads/1737698915208-MOCK_DATA (4).csv
Normal file
|
@ -0,0 +1,11 @@
|
|||
slug,title,body,categoryIDs,tagIDs
|
||||
tortor risus dapibus augue vel accumsan tellus nisi eu orci mauris lacinia sapien,volutpat quam pede lobortis ligula sit amet eleifend pede libero quis orci nullam molestie nibh in lectus pellentesque at,lacus purus aliquet at feugiat non pretium quis lectus suspendisse potenti in eleifend quam a odio in hac habitasse platea dictumst maecenas ut massa quis augue,67932a05fc13ae63219b57f2,67932a05fc13ae63219b57f3
|
||||
sapien iaculis congue vivamus metus arcu adipiscing molestie hendrerit at vulputate vitae nisl aenean lectus pellentesque eget nunc,nullam varius nulla facilisi cras non velit nec nisi vulputate nonummy maecenas tincidunt lacus at,mi pede malesuada in imperdiet et commodo vulputate justo in blandit ultrices enim lorem ipsum dolor sit amet consectetuer adipiscing elit proin interdum mauris non ligula pellentesque ultrices,67932a05fc13ae63219b57f4,67932a05fc13ae63219b57f5
|
||||
vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae mauris viverra diam vitae quam,mus vivamus vestibulum sagittis sapien cum sociis natoque penatibus et magnis dis parturient,felis eu sapien cursus vestibulum proin eu mi nulla ac enim in tempor turpis nec euismod scelerisque quam turpis adipiscing,67932a05fc13ae63219b57f6,67932a05fc13ae63219b57f7
|
||||
consequat nulla nisl nunc nisl duis bibendum felis sed interdum venenatis turpis enim blandit mi in porttitor pede,in quis justo maecenas rhoncus aliquam lacus morbi quis tortor id nulla ultrices aliquet maecenas leo,amet sem fusce consequat nulla nisl nunc nisl duis bibendum felis sed interdum venenatis turpis enim blandit mi in porttitor pede justo eu massa donec dapibus duis,67932a05fc13ae63219b57f8,67932a05fc13ae63219b57f9
|
||||
ac est lacinia nisi venenatis tristique fusce congue diam id,pretium nisl ut volutpat sapien arcu sed augue aliquam erat volutpat in congue etiam justo etiam pretium iaculis justo,in tempor turpis nec euismod scelerisque quam turpis adipiscing lorem vitae mattis nibh ligula nec sem duis aliquam convallis nunc proin at turpis a pede posuere nonummy integer,67932a05fc13ae63219b57fa,67932a05fc13ae63219b57fb
|
||||
eget nunc donec quis orci eget orci vehicula condimentum curabitur in libero ut massa,ipsum dolor sit amet consectetuer adipiscing elit proin interdum mauris non ligula,in lacus curabitur at ipsum ac tellus semper interdum mauris ullamcorper purus sit amet nulla quisque arcu libero rutrum ac lobortis vel dapibus at,67932a05fc13ae63219b57fc,67932a05fc13ae63219b57fd
|
||||
lorem quisque ut erat curabitur gravida nisi at nibh in hac habitasse platea dictumst aliquam augue quam sollicitudin vitae consectetuer,ut nunc vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae mauris viverra diam,in hac habitasse platea dictumst maecenas ut massa quis augue luctus tincidunt nulla mollis molestie lorem quisque ut erat curabitur gravida nisi at nibh in hac habitasse platea,67932a05fc13ae63219b57fe,67932a05fc13ae63219b57ff
|
||||
lectus aliquam sit amet diam in magna bibendum imperdiet nullam orci pede venenatis non sodales sed tincidunt eu,nulla suspendisse potenti cras in purus eu magna vulputate luctus cum sociis natoque penatibus et,venenatis lacinia aenean sit amet justo morbi ut odio cras mi pede malesuada in imperdiet et commodo vulputate justo in blandit ultrices enim lorem ipsum dolor sit,67932a05fc13ae63219b5800,67932a05fc13ae63219b5801
|
||||
sit amet consectetuer adipiscing elit proin risus praesent lectus vestibulum quam sapien varius ut blandit non interdum in ante vestibulum,id massa id nisl venenatis lacinia aenean sit amet justo morbi ut odio cras mi pede malesuada in imperdiet et,suspendisse potenti in eleifend quam a odio in hac habitasse platea dictumst maecenas ut massa quis augue luctus tincidunt nulla mollis,67932a05fc13ae63219b5802,67932a05fc13ae63219b5803
|
||||
consectetuer adipiscing elit proin interdum mauris non ligula pellentesque ultrices phasellus id sapien in sapien iaculis,libero rutrum ac lobortis vel dapibus at diam nam tristique tortor,tempus sit amet sem fusce consequat nulla nisl nunc nisl duis bibendum felis sed interdum venenatis turpis enim blandit mi in porttitor pede justo eu massa donec dapibus,67932a05fc13ae63219b5804,67932a05fc13ae63219b5805
|
|
21
validations/blogValidations.js
Normal file
|
@ -0,0 +1,21 @@
|
|||
const Joi = require("joi");
|
||||
|
||||
const validation = Joi.object({
|
||||
slug: Joi.string().required(),
|
||||
title: Joi.string().required(),
|
||||
body: Joi.string().required(),
|
||||
categoryIDs: Joi.string().required(),
|
||||
tagIDs: Joi.string().required(),
|
||||
coverImage: Joi.string().optional(),
|
||||
});
|
||||
|
||||
function blogUserValidater(req, res, next) {
|
||||
const { error } = validation.validate(req.body);
|
||||
if (error) {
|
||||
res.status(406).json({ msg: "Blog is not valid", details: error.details });
|
||||
} else {
|
||||
next();
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = blogUserValidater;
|
17
validations/categoryValidation.js
Normal file
|
@ -0,0 +1,17 @@
|
|||
const Joi = require("joi");
|
||||
|
||||
const validation = Joi.object({
|
||||
name: Joi.string().required(),
|
||||
blogIDs: Joi.string().required()
|
||||
});
|
||||
|
||||
function categoryValidater(req, res, next) {
|
||||
const { error } = validation.validate(req.body);
|
||||
if (error) {
|
||||
res.status(406).json({ msg: "Category is not valid", details: error.details });
|
||||
} else {
|
||||
next();
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = categoryValidater;
|
17
validations/commentsValidation.js
Normal file
|
@ -0,0 +1,17 @@
|
|||
const Joi = require("joi");
|
||||
|
||||
const validation = Joi.object({
|
||||
comment: Joi.string().required(),
|
||||
blogId: Joi.string().required()
|
||||
});
|
||||
|
||||
function commentValidater(req, res, next) {
|
||||
const { error } = validation.validate(req.body);
|
||||
if (error) {
|
||||
res.status(406).json({ msg: "Comment is not valid", details: error.details });
|
||||
} else {
|
||||
next();
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = commentValidater;
|
19
validations/tagValidation.js
Normal file
|
@ -0,0 +1,19 @@
|
|||
const Joi = require("joi");
|
||||
|
||||
const validation = Joi.object({
|
||||
name: Joi.string().required(),
|
||||
blogIDs: Joi.string().required(),
|
||||
});
|
||||
|
||||
function tagValidater(req, res, next) {
|
||||
const { error } = validation.validate(req.body);
|
||||
if (error) {
|
||||
res
|
||||
.status(406)
|
||||
.json({ msg: "Category is not valid", details: error.details });
|
||||
} else {
|
||||
next();
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = tagValidater;
|