reels
This commit is contained in:
@@ -60,12 +60,13 @@ const createAdvertisingValidationRules = () => {
|
||||
check('city').notEmpty().withMessage('شهر نمیتواند خالی باشد')
|
||||
]
|
||||
}
|
||||
// تابع کمکی برای ذخیره تصاویر
|
||||
// تابع کمکی برای ذخیره تصاویر — file یه آبجکتِ multerه (originalname/path)، نه
|
||||
// express-fileupload (name/path)
|
||||
const saveFile = async (file, folder, userName) => {
|
||||
const uploadDir = path.join(__dirname, '../../../../storage', folder)
|
||||
if (!fs.existsSync(uploadDir)) fs.mkdirSync(uploadDir, { recursive: true })
|
||||
|
||||
const uniqueFileName = `${userName}-${Date.now()}${Math.random().toString().slice(2, 11)}${path.extname(file.name)}`
|
||||
const uniqueFileName = `${userName}-${Date.now()}${Math.random().toString().slice(2, 11)}${path.extname(file.originalname)}`
|
||||
const filePath = path.join(uploadDir, uniqueFileName)
|
||||
await fs.move(file.path, filePath)
|
||||
return `/${folder}/${uniqueFileName}`
|
||||
@@ -129,15 +130,16 @@ const createAdvertising = async (req, res, next) => {
|
||||
return res.status(422).json({ error: true, message: 'فرمت خدمات اشتباه است' })
|
||||
}
|
||||
|
||||
// multer (routes/application/advertising/index.js) با .any() همهی فایلها رو
|
||||
// بهصورتِ آرایه میده (چون serviceImages[id] اسمِ فیلدش بهازای هر خدمت پویاست)
|
||||
const uploadedFiles = Array.isArray(req.files) ? req.files : []
|
||||
|
||||
const servicesWithImages = []
|
||||
for (const service of parsedServices) {
|
||||
const serviceImages = []
|
||||
const serviceId = service.id
|
||||
const serviceFiles = req.files?.serviceImages?.[serviceId]
|
||||
const imageFiles = Array.isArray(serviceFiles) ? serviceFiles : serviceFiles ? [serviceFiles] : []
|
||||
|
||||
for (const file of imageFiles) {
|
||||
const imageUrl = await saveFile(file, 'services', user.user_name)
|
||||
const serviceFile = uploadedFiles.find((f) => f.fieldname === `serviceImages[${service.id}]`)
|
||||
if (serviceFile) {
|
||||
const imageUrl = await saveFile(serviceFile, 'services', user.user_name)
|
||||
serviceImages.push(imageUrl)
|
||||
service.image = imageUrl
|
||||
}
|
||||
@@ -145,7 +147,7 @@ const createAdvertising = async (req, res, next) => {
|
||||
}
|
||||
|
||||
// ✅ مدیریت تصاویر تبلیغ
|
||||
const imageFiles = Array.isArray(req.files?.images) ? req.files.images : req.files?.images ? [req.files.images] : []
|
||||
const imageFiles = uploadedFiles.filter((f) => f.fieldname === 'images')
|
||||
const images = []
|
||||
for (const file of imageFiles) {
|
||||
const imageUrl = await saveFile(file, 'advertising', user.user_name)
|
||||
@@ -1337,6 +1339,10 @@ const editAdvertising = async (req, res, next) => {
|
||||
const provinceFind = await ProvinceModel.findOne({ id: province }, { _id: 0 })
|
||||
const cityFind = await CityModel.findOne({ id: city })
|
||||
|
||||
// multer (routes/application/advertising/index.js) با .any() همهی فایلها رو
|
||||
// بهصورتِ آرایه میده (چون serviceImages[id] اسمِ فیلدش بهازای هر خدمت پویاست)
|
||||
const uploadedFiles = Array.isArray(req.files) ? req.files : []
|
||||
|
||||
// مدیریت تصاویر برای خدمات
|
||||
const servicesWithImages = []
|
||||
const parsedServices = JSON.parse(services)
|
||||
@@ -1345,24 +1351,12 @@ const editAdvertising = async (req, res, next) => {
|
||||
if (typeof service.image === 'string' && service.image.startsWith('/services/')) {
|
||||
servicesWithImages.push(service)
|
||||
} else {
|
||||
const serviceImages = []
|
||||
const serviceId = service.id
|
||||
if (req.files && req.files.serviceImages && req.files.serviceImages[serviceId]) {
|
||||
const imageFiles = Array.isArray(req.files.serviceImages[serviceId]) ? req.files.serviceImages[serviceId] : [req.files.serviceImages[serviceId]]
|
||||
const uploadDir = path.join(__dirname, '../../../../storage/services')
|
||||
if (!fs.existsSync(uploadDir)) {
|
||||
fs.mkdirSync(uploadDir, { recursive: true })
|
||||
}
|
||||
for (const imageFile of imageFiles) {
|
||||
const uniqueFileName = `${user.user_name}-${Date.now()}${Math.random().toString().slice(2, 11)}${path.extname(imageFile.name)}`
|
||||
const filePath = path.join(uploadDir, uniqueFileName)
|
||||
await fs.move(imageFile.path, filePath)
|
||||
const imageUrl = `/services/${uniqueFileName}`
|
||||
serviceImages.push(imageUrl)
|
||||
service.image = imageUrl
|
||||
}
|
||||
const serviceFile = uploadedFiles.find((f) => f.fieldname === `serviceImages[${service.id}]`)
|
||||
if (serviceFile) {
|
||||
const imageUrl = await saveFile(serviceFile, 'services', user.user_name)
|
||||
service.image = imageUrl
|
||||
}
|
||||
servicesWithImages.push({ ...service, image: serviceImages[0] })
|
||||
servicesWithImages.push(service)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1379,22 +1373,10 @@ const editAdvertising = async (req, res, next) => {
|
||||
}
|
||||
|
||||
// اضافه کردن تصاویر جدید
|
||||
if (req.files && req.files.images) {
|
||||
const imageFiles = Array.isArray(req.files.images) ? req.files.images : [req.files.images]
|
||||
const uploadDir = path.join(__dirname, '../../../../storage/advertising')
|
||||
if (!fs.existsSync(uploadDir)) {
|
||||
fs.mkdirSync(uploadDir, { recursive: true })
|
||||
}
|
||||
for (const imageFile of imageFiles) {
|
||||
// بررسی فرمت تصویر
|
||||
if (imageFile && typeof imageFile === 'object' && imageFile.path) {
|
||||
const uniqueFileName = `${user.user_name}-${Date.now()}${Math.random().toString().slice(2, 11)}${path.extname(imageFile.name)}`
|
||||
const filePath = path.join(uploadDir, uniqueFileName)
|
||||
await fs.move(imageFile.path, filePath)
|
||||
const imageUrl = `/advertising/${uniqueFileName}`
|
||||
images.push(imageUrl)
|
||||
}
|
||||
}
|
||||
const imageFiles = uploadedFiles.filter((f) => f.fieldname === 'images')
|
||||
for (const file of imageFiles) {
|
||||
const imageUrl = await saveFile(file, 'advertising', user.user_name)
|
||||
images.push(imageUrl)
|
||||
}
|
||||
const parsedFeatures = JSON.parse(features)
|
||||
|
||||
@@ -1421,8 +1403,8 @@ const editAdvertising = async (req, res, next) => {
|
||||
await advertising.save()
|
||||
|
||||
if (contactInfo && contactInfo.saveInfoForNextAds) {
|
||||
user.contactInfo = contactInfo
|
||||
await user.save()
|
||||
// updateOne اتمیک بهجای user.save() — همون دلیلِ فیکسِ setProfileImageController.js
|
||||
await UserModel.updateOne({ _id: user._id }, { contactInfo })
|
||||
}
|
||||
res.status(200).json({
|
||||
message: 'ویترین با موفقیت ویرایش شد',
|
||||
@@ -1646,7 +1628,7 @@ const updateUserAdvertisingProfile = async (req, res, next) => {
|
||||
})
|
||||
}
|
||||
|
||||
const { profile_image } = req.files
|
||||
const profile_image = req.file
|
||||
const {
|
||||
// profile_image,
|
||||
vitrine_name,
|
||||
@@ -1670,7 +1652,7 @@ const updateUserAdvertisingProfile = async (req, res, next) => {
|
||||
if (!fs.existsSync(uploadDir)) {
|
||||
fs.mkdirSync(uploadDir, { recursive: true })
|
||||
}
|
||||
const uniqueFileName = `${advertisingProfile?.vitrine_name}-${Date.now()}${path.extname(profile_image.name)}`
|
||||
const uniqueFileName = `${advertisingProfile?.vitrine_name}-${Date.now()}${path.extname(profile_image.originalname)}`
|
||||
const filePath = path.join(uploadDir, uniqueFileName)
|
||||
await fs.move(profile_image.path, filePath)
|
||||
updateFields.profile_image = `/profiles/${uniqueFileName}`
|
||||
|
||||
Reference in New Issue
Block a user