Files
ostandari/server/controllers/yearBannerController.js
2026-06-19 15:47:02 +03:30

143 lines
3.6 KiB
JavaScript

const YearBanner = require('../models/YearBanner');
const {body, validationResult, checkSchema} = require('express-validator');
const {_sr} = require('../plugins/serverResponses');
const {res404, res500} = require('../plugins/controllersHelperFunctions');
const {uploadProcessedImage} = require('../plugins/yearBannerImageStorage');
////// variables
const yearBannerWidth = 1920
const yearBannerHeight = 160
const yearBannerQuality = 100
module.exports.updateYearBanner = [
checkSchema({
iranFlag: {
optional: true,
isBoolean: true,
errorMessage: _sr['fa'].format.boolean
}
}),
async (req, res) => {
const errors = validationResult(req)
if (!errors.isEmpty()) return res.status(422).json({validation: errors.mapped()});
try {
/**
* get data from input
*/
const {
iranFlag,
electionBtn,
hasEmail,
hasGPlus,
hasTweeter,
hasInstagram,
email,
gPlus,
tweeter,
instagram
} = req.body
const yearBanner = await YearBanner.findOne();
let imageName
if (req.files?.mainCover) {
const image = req.files.mainCover;
if (!_sr.supportedImageFormats.includes(image.mimetype.split('/')[1])) {
return res.status(422).json({validation: {cover: {msg: _sr['fa'].format.image}}});
}
imageName = `mainPage_cover.jpg`;
await uploadProcessedImage(
image.data,
imageName,
yearBannerWidth,
yearBannerHeight,
yearBannerQuality
);
}
if (yearBanner) {
yearBanner.iranFlag = iranFlag;
yearBanner.electionBtn = electionBtn;
// footerOptions
yearBanner.hasEmail = hasEmail;
yearBanner.hasGPlus = hasGPlus;
yearBanner.hasTweeter = hasTweeter;
yearBanner.hasInstagram = hasInstagram;
yearBanner.email = email;
yearBanner.gPlus = gPlus;
yearBanner.tweeter = tweeter;
yearBanner.instagram = instagram;
if (req.files?.mainCover) yearBanner.mainCover = imageName;
yearBanner._updatedBy = req.user._id;
await yearBanner.save();
return res.json({message: _sr['fa'].response.success_save});
} else {
const data = {
iranFlag,
electionBtn,
hasEmail,
hasGPlus,
hasTweeter,
hasInstagram,
email,
gPlus,
tweeter,
instagram,
_updatedBy: req.user._id
}
if (req.files?.mainCover) data.mainCover = imageName;
await YearBanner.create(data);
return res.json({message: _sr['fa'].response.success_save});
}
} catch (error) {
return res500(res, `مشکلی در اجرای درخواست پیش آمده است`);
}
}
]
module.exports.getYearBanner = [
async (req, res) => {
try {
/**
* get getYearBanner
*/
const getYearBanner = await YearBanner.findOne();
/**
* if not exist
*/
if (!getYearBanner) return res.json({
mainCover: '',
iranFlag: true,
electionBtn: true,
hasEmail: true,
hasGPlus: true,
hasTweeter: true,
hasInstagram: true,
email: '',
gPlus: '',
tweeter: '',
instagram: ''
});
/**
* show result
*/
return res.json(getYearBanner);
} catch (error) {
/**
* if we got unkown error show to client
*/
return res500(res, `مشکلی در اجرای درخواست شما پیش آمده است`);
}
}
]