This commit is contained in:
payacom
2026-10-09 15:44:47 +03:30
parent 367416d419
commit e5dcd0f1b2
14 changed files with 282 additions and 197 deletions

View File

@@ -1,4 +1,8 @@
const express = require('express')
const multer = require('multer')
const crypto = require('crypto')
const fs = require('fs')
const path = require('path')
const { setProfileImage, updateProfileImage } = require('../../../controllers/application/verify/setProfileImageController')
const { setExpertise, updateExpertise } = require('../../../controllers/application/verify/expertiseController')
const { setGender, updateGender } = require('../../../controllers/application/verify/genderController')
@@ -16,16 +20,54 @@ const { setServices, updateServices } = require('../../../controllers/applicatio
const { setPersonalDetails, updatePersonalDetails } = require('../../../controllers/application/verify/personalDetailsController')
const router = express.Router()
router.post('/profile_image', setProfileImage)
router.patch('/profile_image', [blockCheck], [auth], updateProfileImage)
// قبلاً express-form-data به‌صورتِ global این فیلدها رو تویِ req.files پر می‌کرد؛
// وقتی اون middleware حذف شد (تداخل با multer توی posts/chat)، این روت بدونِ هیچ
// parserِ جایگزینی موند — یعنی req.files همیشه undefined بود و هر آپلودِ عکسِ
// پروفایل با «خطایی رخ داده است» شکست می‌خورد (همون الگویی که قبلاً برای
// /api/v1/chat/file پیدا و با multer.diskStorage رفع شد — نگاه کن به index.js)
const profileImageDir = path.join(__dirname, '../../../storage/profiles')
if (!fs.existsSync(profileImageDir)) {
fs.mkdirSync(profileImageDir, { recursive: true })
}
const profileImageUpload = multer({
storage: multer.diskStorage({
destination: (req, file, cb) => cb(null, profileImageDir),
filename: (req, file, cb) => {
cb(null, `${Date.now()}-${crypto.randomUUID()}${path.extname(file.originalname || '')}`)
}
}),
limits: { fileSize: 20 * 1024 * 1024 }
}).single('profile_image')
router.post('/profile_image', profileImageUpload, setProfileImage)
router.patch('/profile_image', [blockCheck], [auth], profileImageUpload, updateProfileImage)
router.post('/expertise', setExpertise)
router.patch('/expertise', [blockCheck], [auth], updateExpertise)
router.post('/gender', setGender)
router.patch('/gender', [blockCheck], [auth], updateGender)
router.post('/sizes', setSizes)
router.patch('/sizes', [blockCheck], [auth], updateSizes)
router.post('/services', setServices)
router.patch('/services', [blockCheck], [auth], updateServices)
// همون باگِ req.files (نگاه کن به کامنتِ profileImageUpload بالا) اینجا هم بود؛
// فرق با بقیه اینه که اسمِ فیلدِ عکسِ هر خدمت پویاست (serviceImages[serviceId]،
// یه آیدی متفاوت برای هر خدمت) پس به‌جای .single()/.fields() با اسمِ ثابت، از
// .any() استفاده می‌شه — همه‌ی فایل‌ها با هر اسمی قبول می‌شه، بعد توی کنترلر با
// file.fieldname تطبیق داده می‌شه
const servicesImagesDir = path.join(__dirname, '../../../storage/services')
if (!fs.existsSync(servicesImagesDir)) {
fs.mkdirSync(servicesImagesDir, { recursive: true })
}
const servicesUpload = multer({
storage: multer.diskStorage({
destination: (req, file, cb) => cb(null, servicesImagesDir),
filename: (req, file, cb) => {
cb(null, `${Date.now()}-${crypto.randomUUID()}${path.extname(file.originalname || '')}`)
}
}),
limits: { fileSize: 20 * 1024 * 1024 }
}).any()
router.post('/services', servicesUpload, setServices)
router.patch('/services', [blockCheck], [auth], servicesUpload, updateServices)
router.post('/colors', setColors)
router.patch('/colors', [blockCheck], [auth], updateColors)
router.post('/personal_details', [blockCheck], [auth], setPersonalDetails)
@@ -38,7 +80,22 @@ router.post('/auth', saveAuthValidationRules(), saveAuth)
router.patch('/shaba', [blockCheck], [auth], updateShaba)
router.post('/address', setAddress)
router.patch('/address', [blockCheck], [auth], updateAddress)
router.post('/national_card_image', setNationalCardImage)
// همون باگِ req.files (نگاه کن به کامنتِ profileImageUpload بالا) اینجا هم بود
const nationalCardDir = path.join(__dirname, '../../../storage/carts')
if (!fs.existsSync(nationalCardDir)) {
fs.mkdirSync(nationalCardDir, { recursive: true })
}
const nationalCardUpload = multer({
storage: multer.diskStorage({
destination: (req, file, cb) => cb(null, nationalCardDir),
filename: (req, file, cb) => {
cb(null, `${Date.now()}-${crypto.randomUUID()}${path.extname(file.originalname || '')}`)
}
}),
limits: { fileSize: 20 * 1024 * 1024 }
}).single('national_card_image')
router.post('/national_card_image', nationalCardUpload, setNationalCardImage)
router.post('/complete', completeRegistration)
module.exports = router