This commit is contained in:
payacom
2026-08-31 20:45:41 +03:30
parent fa9f23c61d
commit 3f416a7a60
367 changed files with 621895 additions and 6443 deletions

View 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,
}