דילוג לתוכן

Full Stack

פיתוח web צד לקוח וצד שרת

281 נושאים 2.4k פוסטים

קטגוריות משנה


  • 265 נושאים
    2k פוסטים
    ע
    @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(); } } }
  • 16 נושאים
    258 פוסטים
    C
    @פנסאים משהו כמו בדיסק..ממממממ.... יש לך את ngrok שהוא חינם אבל: תצתרך להפעיל אותו 24/6 על חשמל ורשת,