539 lines
14 KiB
JavaScript
539 lines
14 KiB
JavaScript
const User = require("../../users/models/user").User;
|
|
const { where, Op } = require("sequelize");
|
|
const { Follow } = require("../../follows/models");
|
|
const Blogs = require("../models/Blogs");
|
|
const Categories = require("../models/Categories");
|
|
const SavedBlogs = require("../models/SavedBlogs");
|
|
const { getFollowingsForIds } = require("../../follows/middlewares/query");
|
|
const { ReBlog } = require("../models/ReBlogs");
|
|
const { editedListPosts, editedPost, startAndEndDates } = require("./proccess");
|
|
const { Comments } = require("../../comments/models/Comments");
|
|
|
|
exports.getBlog = async function({blogId, myUserId}) {
|
|
const blog = await Blogs.findOne({
|
|
where: {
|
|
id: blogId
|
|
},
|
|
include: [User, Categories, {
|
|
model: SavedBlogs,
|
|
where: [(myUserId) ? {
|
|
userId: myUserId
|
|
} : {}],
|
|
required: false
|
|
}, {
|
|
model: Comments,
|
|
include: User
|
|
}]
|
|
});
|
|
|
|
(blog) && editedPost(blog);
|
|
|
|
return blog;
|
|
};
|
|
|
|
exports.getBlogs = async function({myUserId}){
|
|
return await Blogs.findAll({
|
|
include: [User, Categories, {
|
|
model: SavedBlogs,
|
|
where: {
|
|
userId: myUserId
|
|
},
|
|
required: false
|
|
}],
|
|
order: [["createdAt", "DESC"]]
|
|
});
|
|
};
|
|
|
|
exports.getBlogsWithUserId = async function({userId, category, myUserId, endDate = false, blogIds = false}){
|
|
endDate = (Boolean(endDate) !== false) && new Date(endDate);
|
|
const blogs = await Blogs.findAll({
|
|
where: {
|
|
[Op.and]: [{
|
|
userId: userId
|
|
}, (blogIds !== false) && {
|
|
[Op.not]: {
|
|
id: blogIds
|
|
}
|
|
},(endDate !== false) && {
|
|
createdAt: {
|
|
[Op.lt]: endDate
|
|
}
|
|
}]
|
|
},
|
|
include:[(category) ? {
|
|
model: Categories,
|
|
where: {
|
|
href: category
|
|
}
|
|
} : Categories, {
|
|
model: SavedBlogs,
|
|
where: {
|
|
userId: myUserId
|
|
},
|
|
required: false
|
|
}, {
|
|
model: Comments,
|
|
include: User
|
|
}, User],
|
|
limit: 20,
|
|
order: [["createdAt", "DESC"]]
|
|
});
|
|
|
|
const date = startAndEndDates(blogs, endDate);
|
|
|
|
const reblogs = await ReBlog.findAll({
|
|
where:[{
|
|
userId: userId
|
|
}, (date.status === true && blogIds) ? {
|
|
createdAt: {
|
|
[Op.between]: [date.endDate, date.startDate]
|
|
}
|
|
} : {}],
|
|
include: [{
|
|
model: Blogs,
|
|
where: {
|
|
[Op.not]: {
|
|
id: blogIds
|
|
}
|
|
},
|
|
include: [(category) ? {
|
|
model: Categories,
|
|
where: {
|
|
href: category
|
|
}
|
|
} : Categories, User, {
|
|
model: SavedBlogs,
|
|
where: {
|
|
userId: myUserId
|
|
},
|
|
required: false
|
|
}, {
|
|
model: Comments,
|
|
include: User
|
|
}]
|
|
}, User],
|
|
limit: 20,
|
|
order: [["createdAt", "DESC"]]
|
|
});
|
|
|
|
const result = await editedListPosts(blogs, reblogs);
|
|
|
|
return result.slice(0, 20);
|
|
};
|
|
|
|
exports.getBlogsWithUsername = async function({username, category, myUserId}){
|
|
const blogs = await Blogs.findAll({
|
|
include:[(category) ? {
|
|
model: Categories,
|
|
where: {
|
|
href: category
|
|
}
|
|
} : Categories, {
|
|
model: User,
|
|
where: {
|
|
username: username
|
|
}
|
|
},{
|
|
model: SavedBlogs,
|
|
where: {
|
|
userId: myUserId
|
|
},
|
|
required: false
|
|
}],
|
|
order: [["createdAt", "DESC"]]
|
|
});
|
|
|
|
const reblogs = await ReBlog.findAll({
|
|
include: [{
|
|
model: Blogs,
|
|
include: [Categories, {
|
|
model: User,
|
|
include: {
|
|
model: Follow,
|
|
where: {
|
|
user: myUserId
|
|
}
|
|
},
|
|
required: true
|
|
}, {
|
|
model: SavedBlogs,
|
|
where: {
|
|
userId: myUserId
|
|
}
|
|
}]
|
|
}, User]
|
|
});
|
|
|
|
const result = new Array(...blogs);
|
|
|
|
reblogs.map(res => {
|
|
res.blog.dataValues.reblog = true;
|
|
res.blog.dataValues.reUser = res.user;
|
|
result.push(res.blog);
|
|
});
|
|
|
|
return result;
|
|
};
|
|
|
|
exports.getBlogsWithCategory = async function({categoryId, categoryTitle, categoryHref, myUserId}){
|
|
return await Blogs.findAll({
|
|
include: [User, Categories, {
|
|
model: Categories,
|
|
where: [(categoryId) && {
|
|
id: categoryId
|
|
}, (categoryTitle) && {
|
|
title: categoryTitle
|
|
}, (categoryHref) && {
|
|
href: categoryHref
|
|
}]
|
|
},{
|
|
model: SavedBlogs,
|
|
where: {
|
|
userId: myUserId
|
|
},
|
|
required: false
|
|
}],
|
|
order: [["createdAt", "DESC"]]
|
|
});
|
|
};
|
|
|
|
exports.getBlogsWithFollows = async function({userId, endDate, blogIds = false}){
|
|
endDate = (endDate) && new Date(endDate);
|
|
console.log(blogIds)
|
|
const blogs = await Blogs.findAll({
|
|
where: {
|
|
[Op.and]: [(blogIds !== false) && {
|
|
[Op.not]: {
|
|
id: blogIds
|
|
}
|
|
}, (endDate) && {
|
|
createdAt: {
|
|
[Op.lt]: endDate
|
|
}
|
|
}]
|
|
},
|
|
include: [{
|
|
model: User,
|
|
include: {
|
|
model: Follow,
|
|
where: {
|
|
user: userId
|
|
},
|
|
},
|
|
required: true
|
|
}, Categories, {
|
|
model: SavedBlogs,
|
|
where: {
|
|
userId: userId
|
|
},
|
|
required: false
|
|
}, {
|
|
model: Comments,
|
|
include: User
|
|
}],
|
|
limit: 20
|
|
});
|
|
|
|
const date = startAndEndDates(blogs, endDate);
|
|
|
|
const reblogs = await ReBlog.findAll({
|
|
where:[(date.status === true && blogIds) ? {
|
|
createdAt: {
|
|
[Op.between]: [date.endDate, date.startDate]
|
|
}
|
|
} : {}],
|
|
include: [{
|
|
model: User,
|
|
include: {
|
|
model: Follow,
|
|
where: {
|
|
user: userId
|
|
},
|
|
},
|
|
required: true
|
|
}, {
|
|
model: Blogs,
|
|
include: [Categories, {
|
|
model: SavedBlogs,
|
|
where: {
|
|
userId: userId
|
|
},
|
|
required: false
|
|
}, {
|
|
model: Comments,
|
|
include: User
|
|
}, User]
|
|
}],
|
|
limit: 20
|
|
});
|
|
|
|
const result = await editedListPosts(blogs, reblogs);
|
|
|
|
return result.slice(0, 20);
|
|
};
|
|
|
|
exports.getBlogsForFollowsWithCategory = async function({userId, category, endDate = false, blogIds = false}){
|
|
endDate = (endDate !== false) && new Date(endDate);
|
|
const blogs = await Blogs.findAll({
|
|
where: {
|
|
[Op.and]: [(blogIds !== false) && {
|
|
[Op.not]: {
|
|
id: blogIds
|
|
}
|
|
}, (endDate !== false) && {
|
|
createdAt: {
|
|
[Op.lt]: endDate
|
|
}
|
|
}]
|
|
},
|
|
include: [{
|
|
model: User,
|
|
include: {
|
|
model: Follow,
|
|
where: {
|
|
user: userId
|
|
}
|
|
},
|
|
required: true
|
|
}, {
|
|
model: Categories,
|
|
where: {
|
|
href: category
|
|
}
|
|
}, {
|
|
model: SavedBlogs,
|
|
where: {
|
|
userId: userId
|
|
},
|
|
required: false
|
|
}, {
|
|
model: Comments,
|
|
include: User
|
|
}],
|
|
limit: 20
|
|
});
|
|
|
|
const date = startAndEndDates(blogs, endDate);
|
|
|
|
const reblogs = await ReBlog.findAll({
|
|
where:[(date.status === true && blogIds) ? {
|
|
createdAt: {
|
|
[Op.between]: [date.endDate, date.startDate]
|
|
}
|
|
} : {}],
|
|
include: [{
|
|
model: User,
|
|
include: {
|
|
model: Follow,
|
|
where: {
|
|
user: userId
|
|
}
|
|
},
|
|
required: true
|
|
}, {
|
|
model: Blogs,
|
|
include: [{
|
|
model: Categories,
|
|
where: {
|
|
href: category
|
|
}
|
|
}, {
|
|
model: SavedBlogs,
|
|
where: {
|
|
userId: userId
|
|
},
|
|
required: false
|
|
}, {
|
|
model: Comments,
|
|
include: User
|
|
}, User],
|
|
required: true
|
|
}],
|
|
limit: 20
|
|
});
|
|
|
|
const result = await editedListPosts(blogs, reblogs);
|
|
|
|
return result.slice(0, 20);
|
|
};
|
|
|
|
exports.getBlogsForDiscover = async function({userId, endDate, blogIds = false}){
|
|
endDate = (endDate) && new Date(endDate);
|
|
|
|
const followsIds = await getFollowingsForIds({
|
|
userId: userId
|
|
});
|
|
|
|
const blogs = await Blogs.findAll({
|
|
where:[{
|
|
[Op.not]: {
|
|
userId: [followsIds, userId]
|
|
}
|
|
}, (endDate) ? {
|
|
createdAt: {
|
|
[Op.lt]: endDate
|
|
}
|
|
} : {}, (blogIds) ? {
|
|
[Op.not]: {
|
|
id: [blogIds, userId]
|
|
}
|
|
} : {}],
|
|
include: [Categories, {
|
|
model: SavedBlogs,
|
|
where: {
|
|
userId: userId
|
|
},
|
|
required: false
|
|
}, {
|
|
model: Comments,
|
|
include: User
|
|
}, User],
|
|
limit: 20,
|
|
order: [["createdAt", "DESC"]]
|
|
});
|
|
|
|
|
|
const date = startAndEndDates(blogs, endDate);
|
|
|
|
const reblogs = await ReBlog.findAll({
|
|
where: [{
|
|
[Op.not]: {
|
|
userId: [followsIds, userId]
|
|
}
|
|
}, (date.status === true && blogIds) ? {
|
|
createdAt: {
|
|
[Op.between]: [date.endDate, date.startDate]
|
|
}
|
|
} : {}],
|
|
include:[{
|
|
model: Blogs,
|
|
where: {
|
|
[Op.not]: {
|
|
userId: [followsIds, userId]
|
|
}
|
|
},
|
|
include: [Categories, User, {
|
|
model: SavedBlogs,
|
|
where: {
|
|
userId: userId
|
|
},
|
|
required: false
|
|
}, {
|
|
model: Comments,
|
|
include: User
|
|
}]
|
|
}, User],
|
|
limit: 20,
|
|
order: [["createdAt", "DESC"]]
|
|
});
|
|
|
|
const result = await editedListPosts(blogs, reblogs);
|
|
|
|
return result.splice(0, 20);
|
|
};
|
|
|
|
exports.getBlogsForDiscoverWithCategory = async function({userId, category, endDate, blogIds = false}){
|
|
endDate = (endDate) && new Date(endDate);
|
|
|
|
const followsIds = await getFollowingsForIds({
|
|
userId: userId
|
|
});
|
|
|
|
console.log(endDate, blogIds);
|
|
|
|
const blogs = await Blogs.findAll({
|
|
where:[{
|
|
[Op.not]: {
|
|
userId: [followsIds, userId]
|
|
}
|
|
}, (endDate) && {
|
|
createdAt: {
|
|
[Op.lt]: endDate
|
|
}
|
|
}],
|
|
include: [{
|
|
model: Categories,
|
|
where: {
|
|
href: category
|
|
},
|
|
required: true
|
|
}, {
|
|
model: SavedBlogs,
|
|
where: {
|
|
userId: userId
|
|
},
|
|
required: false
|
|
}, {
|
|
model: Comments,
|
|
include: User
|
|
}, User],
|
|
limit: 20,
|
|
order: [["createdAt", "DESC"]]
|
|
});
|
|
|
|
const date = startAndEndDates(blogs, endDate);
|
|
|
|
const reblogs = await ReBlog.findAll({
|
|
where: [{
|
|
[Op.not]: {
|
|
userId: [followsIds, userId]
|
|
}
|
|
}, (date.status === true && blogIds) ? {
|
|
createdAt: {
|
|
[Op.between]: [date.endDate, date.startDate]
|
|
}
|
|
} : {}],
|
|
include:[{
|
|
model: Blogs,
|
|
where:[{
|
|
[Op.not]: {
|
|
userId: [followsIds, userId]
|
|
}
|
|
}],
|
|
include: [{
|
|
model: Categories,
|
|
where: {
|
|
href: category
|
|
},
|
|
required: true
|
|
}, {
|
|
model: SavedBlogs,
|
|
where: {
|
|
userId: userId
|
|
},
|
|
required: false
|
|
}, {
|
|
model: Comments,
|
|
include: User
|
|
}, User]
|
|
}, User],
|
|
limit: 20,
|
|
order: [["createdAt", "DESC"]]
|
|
});
|
|
|
|
const result = await editedListPosts(blogs, reblogs);
|
|
|
|
return result;
|
|
};
|
|
|
|
|
|
// CATE
|
|
exports.getCategoryWithParams = async function({categoryId, categoryTitle}){
|
|
return await Categories.findOne({
|
|
where:[
|
|
(categoryId) ? {id: categoryId} : {},
|
|
(categoryTitle) ? {title: categoryTitle} : {}
|
|
]
|
|
});
|
|
};
|
|
|
|
|
|
// SAVED
|
|
exports.getSaved = async function({userId, blogId}){
|
|
return await SavedBlogs.findOne({
|
|
where:{
|
|
userId: userId,
|
|
blogId: blogId
|
|
}
|
|
});
|
|
}; |