2021-11-05 01:39:35 +03:00
|
|
|
const asyncWrapper = require('../../middleware/asyncWrapper');
|
|
|
|
const ErrorResponse = require('../../utils/ErrorResponse');
|
|
|
|
const Category = require('../../models/Category');
|
|
|
|
const Bookmark = require('../../models/Bookmark');
|
2021-11-22 18:45:59 +03:00
|
|
|
const { Sequelize } = require('sequelize');
|
|
|
|
const loadConfig = require('../../utils/loadConfig');
|
2021-11-05 01:39:35 +03:00
|
|
|
|
|
|
|
// @desc Get single category
|
|
|
|
// @route GET /api/categories/:id
|
|
|
|
// @access Public
|
|
|
|
const getSingleCategory = asyncWrapper(async (req, res, next) => {
|
2021-11-22 18:45:59 +03:00
|
|
|
const { useOrdering: orderType } = await loadConfig();
|
|
|
|
|
2021-11-11 18:43:00 +03:00
|
|
|
const visibility = req.isAuthenticated ? {} : { isPublic: true };
|
|
|
|
|
2021-11-22 18:45:59 +03:00
|
|
|
const order =
|
|
|
|
orderType == 'name'
|
|
|
|
? [[Sequelize.fn('lower', Sequelize.col('bookmarks.name')), 'ASC']]
|
|
|
|
: [[{ model: Bookmark, as: 'bookmarks' }, orderType, 'ASC']];
|
|
|
|
|
2021-11-05 01:39:35 +03:00
|
|
|
const category = await Category.findOne({
|
2021-11-11 18:43:00 +03:00
|
|
|
where: { id: req.params.id, ...visibility },
|
2021-11-05 01:39:35 +03:00
|
|
|
include: [
|
|
|
|
{
|
|
|
|
model: Bookmark,
|
|
|
|
as: 'bookmarks',
|
2021-11-11 18:43:00 +03:00
|
|
|
where: visibility,
|
2021-11-05 01:39:35 +03:00
|
|
|
},
|
|
|
|
],
|
2021-11-22 18:45:59 +03:00
|
|
|
order,
|
2021-11-05 01:39:35 +03:00
|
|
|
});
|
|
|
|
|
|
|
|
if (!category) {
|
|
|
|
return next(
|
|
|
|
new ErrorResponse(
|
|
|
|
`Category with id of ${req.params.id} was not found`,
|
|
|
|
404
|
|
|
|
)
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
res.status(200).json({
|
|
|
|
success: true,
|
|
|
|
data: category,
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
module.exports = getSingleCategory;
|