full
This commit is contained in:
136
controllers/panel/academy/academyContentController.js
Normal file
136
controllers/panel/academy/academyContentController.js
Normal file
@@ -0,0 +1,136 @@
|
||||
const AcademyContentModel = require('../../../models/AcademyContentModel')
|
||||
const CourseModel = require('../../../models/CourseModel')
|
||||
const jMoment = require('moment-jalaali')
|
||||
const { default: mongoose } = require('mongoose')
|
||||
const { TEMP_ACCEPT } = require('../../../utils/moderationStatus')
|
||||
|
||||
const getAcademyContents = async (req, res, next) => {
|
||||
try {
|
||||
const token = req.header('Authorization')?.split(' ')[1]
|
||||
if (!token) return res.status(401).send('Access Denied')
|
||||
|
||||
const { page = 1, limit = 10, status = TEMP_ACCEPT, courseId } = req.query
|
||||
const filter = {}
|
||||
|
||||
if (status && status !== 'all') {
|
||||
filter.status = status
|
||||
}
|
||||
if (courseId && mongoose.Types.ObjectId.isValid(courseId)) {
|
||||
filter.courseId = courseId
|
||||
}
|
||||
|
||||
const options = {
|
||||
page: parseInt(page, 10),
|
||||
limit: parseInt(limit, 10),
|
||||
sort: { createdAt: -1 },
|
||||
}
|
||||
|
||||
const result = await AcademyContentModel.paginate(filter, options)
|
||||
const courseIds = [
|
||||
...new Set(result.docs.map((item) => item.courseId).filter(Boolean)),
|
||||
]
|
||||
const courses = await CourseModel.find({ _id: { $in: courseIds } })
|
||||
.select('_id cuorse_name user_id')
|
||||
.lean()
|
||||
const courseMap = Object.fromEntries(
|
||||
courses.map((course) => [String(course._id), course])
|
||||
)
|
||||
|
||||
const items = result.docs.map((item) => ({
|
||||
_id: item._id,
|
||||
courseId: item.courseId,
|
||||
courseName: courseMap[String(item.courseId)]?.cuorse_name || '-',
|
||||
file_name: item.file_name || '-',
|
||||
type: item.type,
|
||||
status: item.status,
|
||||
is_free: item.is_free,
|
||||
course_video: item.course_video,
|
||||
course_images: item.course_images,
|
||||
createdAt: item.createdAt
|
||||
? jMoment(item.createdAt).format('jYYYY-jMM-jDD HH:mm')
|
||||
: '-',
|
||||
}))
|
||||
|
||||
res.status(200).json({
|
||||
items,
|
||||
totalPages: result.totalPages,
|
||||
totalItems: result.totalDocs,
|
||||
})
|
||||
} catch (error) {
|
||||
next(error)
|
||||
}
|
||||
}
|
||||
|
||||
const getAcademyContentDetail = async (req, res, next) => {
|
||||
try {
|
||||
const token = req.header('Authorization')?.split(' ')[1]
|
||||
if (!token) return res.status(401).send('Access Denied')
|
||||
|
||||
const { contentId } = req.query
|
||||
if (!contentId || !mongoose.Types.ObjectId.isValid(contentId)) {
|
||||
return res.status(400).json({ message: 'شناسه محتوا معتبر نیست' })
|
||||
}
|
||||
|
||||
const item = await AcademyContentModel.findById(contentId).lean()
|
||||
if (!item) {
|
||||
return res.status(404).json({ message: 'محتوا یافت نشد' })
|
||||
}
|
||||
|
||||
const course = await CourseModel.findById(item.courseId)
|
||||
.select('_id cuorse_name caption user_id')
|
||||
.lean()
|
||||
|
||||
res.status(200).json({
|
||||
item: {
|
||||
...item,
|
||||
createdAt: item.createdAt
|
||||
? jMoment(item.createdAt).format('jYYYY-jMM-jDD HH:mm')
|
||||
: '-',
|
||||
course,
|
||||
},
|
||||
})
|
||||
} catch (error) {
|
||||
next(error)
|
||||
}
|
||||
}
|
||||
|
||||
const updateAcademyContentStatus = async (req, res, next) => {
|
||||
try {
|
||||
const token = req.header('Authorization')?.split(' ')[1]
|
||||
if (!token) return res.status(401).send('Access Denied')
|
||||
|
||||
const { id, status } = req.body
|
||||
if (!id || !status) {
|
||||
return res.status(422).json({ message: 'اطلاعات ناقص است' })
|
||||
}
|
||||
|
||||
if (!['accept', 'reject', 'temp_accept', 'pending'].includes(status)) {
|
||||
return res.status(422).json({ message: 'وضعیت نامعتبر است' })
|
||||
}
|
||||
|
||||
const item = await AcademyContentModel.findById(id)
|
||||
if (!item) {
|
||||
return res.status(404).json({ message: 'محتوا یافت نشد' })
|
||||
}
|
||||
|
||||
item.status = status
|
||||
await item.save()
|
||||
|
||||
res.status(200).json({
|
||||
message:
|
||||
status === 'accept'
|
||||
? 'ویدیو با موفقیت تایید کامل شد'
|
||||
: status === 'reject'
|
||||
? 'ویدیو رد شد'
|
||||
: 'وضعیت ویدیو بهروزرسانی شد',
|
||||
})
|
||||
} catch (error) {
|
||||
next(error)
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
getAcademyContents,
|
||||
getAcademyContentDetail,
|
||||
updateAcademyContentStatus,
|
||||
}
|
||||
Reference in New Issue
Block a user