@A0533057932
const validetFunctions = {
phone: isValidIsraeliPhone,
type: checkType,
profession: checkProfession,
min_max_price: checkNumber,
ringMode: checkRingMode,
area: checkArea,
city: checkCity
};
function validateAdParams(params) {
let cleanParams = {};
for (const key of Object.keys(params)) {
const validateFunc = validetFunctions[key];
if (!validateFunc) { return { status: "error", message:`Unknown parameter: ${key}` }; }
if (!validateFunc(params[key])) { return { status: "error", message: `Invalid value for ${key}` }; }
cleanParams[key] = params[key];
};
return { status: "success", data: cleanParams };
}
async function insertRecord(connection, tableName, dataObject) {
const columns = Object.keys(dataObject);
const values = Object.values(dataObject);
const placeholders = columns.map(() => '?').join(', ');
// בונה SQL באופן דינמי - אין יותר שרשור מחרוזות ידני עם פסיקים!
const sql = `INSERT INTO ${tableName} (${columns.join(', ')}) VALUES (${placeholders})`;
return connection.execute(sql, values);
}
export async function addAdNEw(params) {
// בדיקת הפרמטרים והכנת אובייקט נקי להוספה למסד הנתונים
const validateResult = validateAdParams(params);
if (validateResult.status === "error") {
return validateResult;
}
// הכנת אובייקט להוספה למסד הנתונים
let adToAdd = {
phone: validateResult.data.phone,
type: validateResult.data.type,
profession: validateResult.data.profession,
}
if (validateResult.data.min_max_price) {adToAdd.min_max_price = validateResult.data.min_max_price;}
if (validateResult.data.type === "מחפש" && validateResult.data.ringMode) {adToAdd.ringMode = validateResult.data.ringMode;}
// הכנת רשימת הערים להכנסה
let citiesToInsert = [];
// אזור - לא חובה, אבל אם קיים חייב להיות תקין
if (validateResult.data.area) {
if (checkArea(validateResult.data.area)) {
citiesToInsert.push(validateResult.data.area);
}
else { return { status: "error", message: "Invalid area" }; }
}
// עיר - לא חובה, אבל אם קיים חייב להיות תקין
else if (validateResult.data.city) {
if (Array.isArray(validateResult.data.city)) {
for (const city of validateResult.data.city) {
citiesToInsert.push(city);
}
}
// אם לא נבחר אזור ולא עיר, נכניס "all" כדי לסמן שהמודעה תקפה לכל הערים
} else { citiesToInsert.push("all"); }
// הוספת המודעה למסד הנתונים
let connection;
try {
connection = await pool.getConnection(); // לוקחים חיבור מהמאגר
await connection.beginTransaction();
const [result] = await insertRecord(connection, 'ads', adToAdd);
const adId = result.insertId;
citiesToInsert = citiesToInsert.map(city => [adId, city]);
await insertRecord(connection, 'ad_cities', citiesToInsert);
await connection.commit();
return { status: "success", message: "Ad added successfully", adId: adId };
} catch (error) {
if (connection) {
console.log("Error adding ad:", error);
await connection.rollback();
throw error;
}}
finally {
if (connection) {
connection.release();
}
}
}