قراءة الرسائل الواردة وترك رسائل النقد البنّاء للمُستخدمين

فراس اللومنذ سنة

شارفت دورة إنشاء واجهة برمجية لموقع مثل صراحة على الانتهاء، فبعد إتمام نظام تسجيل الدخول وتسجيل حساب جديد، بقي لدينا إنشاء نظام قراءة الرسائل الواردة وترك الرسائل للمُستخدمين، وهذا نظام بسيط جدًا سنقوم بإنشاءه عبر دالّتين داخل ملف database.js

// أضف هذا السطر في بداية الملف
var ObjectId = require('mongodb').ObjectID;

// أضف هاتين الدالتين في أي مكان ضمن الملف قبل جملة module.exports


 function postMessage(mUsername, message) {
  return new Promise((onResolve, onReject)=>{
    MongoClient.connect(dbURL, {poolSize: 10},async function(err, client) {
      assert.equal(null, err);
      const db = client.db(dbName);
         let checkUsername = await db.collection("users").findOne({username: mUsername})
         if (checkUsername == null) {
           onReject("لم يتم العثور على المُستخدم المطلوب")
         }else{
       let messageData = {
            userID: checkUsername["_id"],
            message: message,
            date: new Date(),
          }
          db.collection("messages").insertOne(messageData, (onError, onDone)=>{
            if (onError != null) onReject("خطأ في نشر الرسالة")
             
             onResolve("تم إرسال الرسالة بنجاح.....")
          })
         }
      client.close();
      
    });
  })
}

 function getUserMessages(userID) {
  return new Promise((onResolve, onReject)=>{
    MongoClient.connect(dbURL, async function(err, client) {
      assert.equal(null, err);
      const db = client.db(dbName);
      db.collection("messages").find({ userID: ObjectId(userID)}, (onError, onDone)=>{
        if (onError != null) onReject("خطأ في جلب الرسائل.")

        onResolve( onDone.sort({date: -1}).toArray())
      })
      client.close();
    });
  })

}


// قم بتعديل الجملة الأخيرة module.exports لتُصبح من هذا الشكل

module.exports = {testDatabaseConnection,signUp, login, getUserMessages, postMessage}

سنشرح الآن الدالة الأولى postMessage، وهي دالة تأخذ مُعاملين Parameters اسم المُستخدم الذي نرغب بترك الرسالة له، والرسال ذاتها. بداية نتأكد من وجود مُستخدم بالاسم المُرسل، وفي حالة عدم وجوده نُرسل خطأ للمُستخدم بأن الشخص المطلوب غير موجود. أما في حالة وجوده، فسوف نقوم بأخذ المعرّف الخاص به ID لاستخدامها في الكائن messageData الذي سيحمل الرسالة، ومُعرّف المُستخدم المُرسلة إليه، والوقت فقط. بعدها قُمنا بتخزين تلك الرسالة في قاعدة البيانات وانتهى كل شيء.

أما الدالة الثانية getUserMessages فهي دالة تجلب الرسائل الواردة للمُستخدم، وهي دالة تُمرّر لها الرقم المُعرّف الخاص بحساب المُستخدم لجلب رسائله. هنا نفهم منطق الدالة الأولى التي جلبت بيانات المُستخدم أولًا وقامت بتخزين مُعرّف المُستخدم، لأن الدالة الثانية تبحث عن الرسائل عبر المُعرّف ID. كان بإمكاننا استخدام اسم المُستخدم عوضًا عن المُعرّف، لكن وجود الرموز والأحرف العربية قد يجعل العملية صعبة في بعض الأوقات، لهذا السبب المُعرّف ID هو الأضمن دائمًا.

الآن ننتقل لملف index.js الذي سنقوم بتعريف مسار جديد فيه خاص بإرسال الرسالة وهو على الشكل

app.post("/message/:username", async (req, res)=>{
        var message = req.body.message 
        if (message != undefined && !validator.isEmpty(message)){
            try{
                await dbConfig.postMessage(req.params.username, message)
                res.send("تم إرسال الرسالة بنجاح")
            }catch(e) {
                res.send(e)
            }    
        }else{
            res.send("لم تقم بإدخال الرسالة.")
        }
})

استخدمنا ضمن الرابط مُتغيّر هو :username لأننا سوف نقوم بتمريره لدالة إرسال الرسائل التي عرّفناها مُسبقًا. وسنقوم باستقبال الرسالة message والتأكّد من أنها ليست فارغة، وفي حالة تمام كل شيء، نقوم باستخدام دالة postMessage.

لو طلبنا الرابط localhost:3033/message/username مع استبدال username باسم مُستخدم أحد مُستخدمي الموقع، من المفترض أن نحصل على رسالة تم إرسال الرسالة بنجاح. قبل الفيديو التوضيحي، نحتاج لتعديل مسار زيارة الصفحة الرئيسية ليُصبح من الشكل

app.get("/", async (req, res)=> {
    if (req.isAuthenticated())
    {
      let msgs = await  dbConfig.getUserMessages(req.user["_id"])
    res.send("أهلًا وسهلًا يا " + req.user["realname"] + "\n لديك هذه الرسائل " + "\n"+ JSON.stringify(msgs))
    }else{
        res.send("أهلًا وسهلًا، يُمكنكم تسجيل حساب جديد لبدء استخدام الموقع")
    }
})

التعديل الجديد فقط للترحيب بالمُستخدم عند تسجيل دخوله مع عرض الرسائل إن وجدت. والآن أترككم مع الفيديو، لكن قبله أتمنى سماع المُلاحظات أو الآراء والطلبات، فنظام صراحة جاهز الآن، يحتاج لبعض التعديلات أكيد. لكن الوظائف الأساسية جاهزة، ويُمكنني إنشاء دروس إضافية لتوضيح بعض الأمور الأُخرى إن وجدت، كإنشاء تطبيق iOS يتّصل بالواجهة البرمجية التي أنشأنها لقراءة رسائل المُستخدم ونشر الرسائل الجديدة.

 

التعليقات (1)

Abdulrahman:

يعطيك العافية اخي ,
لو تربط API مع موقع ويب بيكون افضل وتوضح الفكرة ونستفيد منها.

لايوجد لديك حساب في عالم البرمجة؟

تحب تنضم لعالم البرمجة؟ وتنشئ عالمك الخاص، تنشر المقالات، الدورات، تشارك المبرمجين وتساعد الآخرين، اشترك الآن بخطوات يسيرة !