From 5202ace0be9669b8dcb2767b55bd62d17a019d4d Mon Sep 17 00:00:00 2001 From: Batuhan Date: Mon, 24 Feb 2025 19:53:37 +0300 Subject: [PATCH] =?UTF-8?q?Kategori=20ve=20Kaydetme=20hakk=C4=B1nda=20yeni?= =?UTF-8?q?likler=20yap=C4=B1ld=C4=B1.=20Yeni=20React=20kodlar=C4=B1na=20u?= =?UTF-8?q?yum=20sa=C4=9Fland=C4=B1.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- database/dump.js | 17 ++++++++++++++++ modules/blogs/app.js | 2 ++ modules/blogs/middlewares/post.js | 32 ++++++++++++++++++++++++++++++ modules/blogs/middlewares/query.js | 21 +++++++++++++++++--- modules/blogs/middlewares/tools.js | 3 +++ modules/blogs/models/SavedBlogs.js | 3 +++ modules/blogs/routes/get.js | 4 ++++ modules/blogs/routes/post.js | 25 +++++++++++++++++++++++ 8 files changed, 104 insertions(+), 3 deletions(-) create mode 100644 modules/blogs/middlewares/post.js create mode 100644 modules/blogs/middlewares/tools.js create mode 100644 modules/blogs/models/SavedBlogs.js create mode 100644 modules/blogs/routes/post.js diff --git a/database/dump.js b/database/dump.js index 1519812..dfc40b3 100644 --- a/database/dump.js +++ b/database/dump.js @@ -1,5 +1,6 @@ const Blogs = require("../modules/blogs/models/Blogs"); const Categories = require("../modules/blogs/models/Categories"); +const SavedBlogs = require("../modules/blogs/models/SavedBlogs"); const Login = require("../modules/logins/models/login"); const User = require("../modules/users/models/user"); @@ -27,6 +28,22 @@ Categories.hasMany(Blogs, { }); Blogs.belongsTo(Categories); +Blogs.hasMany(SavedBlogs, { + foreignKey:{ + allowNull: false, + unique: false + } +}); +SavedBlogs.belongsTo(Blogs); + +User.hasMany(SavedBlogs, { + foreignKey:{ + allowNull: false, + unique: false + } +}); +SavedBlogs.belongsTo(User); + exports.createTesting = async function(){ const resultLogins = await Login.findAll(); if(resultLogins.length == 0){ diff --git a/modules/blogs/app.js b/modules/blogs/app.js index 3b7fc44..3cbf7f6 100644 --- a/modules/blogs/app.js +++ b/modules/blogs/app.js @@ -3,10 +3,12 @@ const app = express(); // ROUTES const routerGet = require("./routes/get"); +const routerPost = require("./routes/post"); const routerPage = require("./routes/page"); // USES app.use(routerGet); +app.use(routerPost); app.use(routerPage); module.exports = app; \ No newline at end of file diff --git a/modules/blogs/middlewares/post.js b/modules/blogs/middlewares/post.js new file mode 100644 index 0000000..dafe60c --- /dev/null +++ b/modules/blogs/middlewares/post.js @@ -0,0 +1,32 @@ +const Blogs = require("../models/Blogs"); +const SavedBlogs = require("../models/SavedBlogs"); +const { getSaved } = require("./query"); +const { checkLenText } = require("./tools"); + +exports.createBlog = async function(data, user){ + const checkTitle = checkLenText(data.title, 5, 25); + const checkText = checkLenText(data.text, 10, 1000); + if(checkTitle && checkText){ + return await Blogs.create({ + title: data.title, + text: data.text, + categoryId: data.cate, + userId: user.id + }); + }else{ + return false; + }; +}; + +exports.createSaved = async function({blogId, userId}){ + const checkQuery = await getSaved({blogId: blogId, userId: userId}); + + if(!checkQuery){ + return await SavedBlogs.create({ + blogId: blogId, + userId: userId + }); + }else{ + return false; + }; +}; \ No newline at end of file diff --git a/modules/blogs/middlewares/query.js b/modules/blogs/middlewares/query.js index 47bf7a5..49fc856 100644 --- a/modules/blogs/middlewares/query.js +++ b/modules/blogs/middlewares/query.js @@ -1,10 +1,12 @@ const User = require("../../users/models/user"); const Blogs = require("../models/Blogs"); const Categories = require("../models/Categories"); +const SavedBlogs = require("../models/SavedBlogs"); exports.getBlogs = async function(){ return await Blogs.findAll({ - include: [User, Categories] + include: [User, Categories], + order: [["createdAt", "DESC"]] }); }; @@ -15,7 +17,8 @@ exports.getBlogsWithUsername = async function({username}){ where: { username: username } - }] + }], + order: [["createdAt", "DESC"]] }); }; @@ -28,7 +31,8 @@ exports.getBlogsWithCategory = async function({categoryId, categoryTitle}){ }, (categoryTitle) && { title: categoryTitle }] - }] + }], + order: [["createdAt", "DESC"]] }); }; @@ -41,4 +45,15 @@ exports.getCategoryWithParams = async function({categoryId, categoryTitle}){ (categoryTitle) ? {title: categoryTitle} : {} ] }); +}; + + +// SAVED +exports.getSaved = async function({userId, blogId}){ + return await SavedBlogs.findOne({ + where:{ + userId: userId, + blogId: blogId + } + }); }; \ No newline at end of file diff --git a/modules/blogs/middlewares/tools.js b/modules/blogs/middlewares/tools.js new file mode 100644 index 0000000..e43c550 --- /dev/null +++ b/modules/blogs/middlewares/tools.js @@ -0,0 +1,3 @@ +exports.checkLenText = function(text, minLen, maxLen){ + return (text.length >= minLen && text.length <= maxLen) && true; +}; \ No newline at end of file diff --git a/modules/blogs/models/SavedBlogs.js b/modules/blogs/models/SavedBlogs.js new file mode 100644 index 0000000..30bf6aa --- /dev/null +++ b/modules/blogs/models/SavedBlogs.js @@ -0,0 +1,3 @@ +const Database = require("../../../database/db"); + +module.exports = Database.define("savedBlogs",{}); \ No newline at end of file diff --git a/modules/blogs/routes/get.js b/modules/blogs/routes/get.js index 096d0e4..366e469 100644 --- a/modules/blogs/routes/get.js +++ b/modules/blogs/routes/get.js @@ -1,6 +1,7 @@ const express = require("express"); const auth = require("../../logins/middlewares/auth"); const { getBlogs, getBlogsWithUsername, getBlogsWithCategory } = require("../middlewares/query"); +const Categories = require("../models/Categories"); const router = express(); router.get("/get/blogs/all", auth, async function (req, res) { @@ -17,4 +18,7 @@ router.get("/get/blogs/user/:username", auth, async function (req, res) { })); }); +router.get("/get/blogs/cate/all", async function(req, res) { + res.json(await Categories.findAll()); +}); module.exports = router; \ No newline at end of file diff --git a/modules/blogs/routes/post.js b/modules/blogs/routes/post.js new file mode 100644 index 0000000..67a9a3b --- /dev/null +++ b/modules/blogs/routes/post.js @@ -0,0 +1,25 @@ +const express = require("express"); +const auth = require("../../logins/middlewares/auth"); +const { createBlog, createSaved } = require("../middlewares/post"); +const { getSaved } = require("../middlewares/query"); +const router = express(); + +router.post("/post/blogs/create", auth, async function(req, res) { + try { + const result = await createBlog(req.body, req.session.user); + if(result){ + return res.json({Status: "Success", Message: "Başarıyla paylaşıldı.", Ico: "/icons/success.svg"}); + }else{ + return res.json({Status: "Failed", Message: "Bir hatadan dolayı paylaşılamadı", Ico: "/icons/failed.svg"}); + } + } catch (error) { + return res.json({Status: "Failed", Message: "Bir hatadan dolayı paylaşılamadı", Ico: "/icons/failed.svg"}); + }; +}); + +router.post("/post/blogs/save", auth, async function(req, res) { + const result = await createSaved({userId: req.session.user.id, blogId: req.body.blogId}); + return (result) && res.json({Status: "Success"}); +}); + +module.exports = router; \ No newline at end of file