Focus mode

Node.js

Kurs - Öğrenci İlişkisi

Kurs ve Öğrenci İlişkisi


Smartedu projemizde bulunan kurslar ile öğrenciler arasında da ilişki bulunmasını isteriz. Öğrenci kullanıcıların kendilerini bir kursa kaydedebilmesini ve bu kayıt işlemini istediğinde sonlandırmasını da isteyebiliriz.


Bu işlemler için öncelikli olarak yapmamız gereken USER modeli içerisinde courses şeklinde bir alan oluşturacağız ve bu alanın referansı yani ilişkili olduğu mode ile Course modeli.


 courses:[{
    type: mongoose.Schema.Types.ObjectId,
    ref:'Course'
  }]


Yukarıda da gördüğünüz üzere courses alanı bir array ve öğrenci her yeni kursa kaydolduğunda bu arrayimize yeni bir kurs bilgisi eklenecek. Bu işlemi yapacak enroll fonksiyonunu aşağıda görebilirsiniz.


exports.enrollCourse = async (req, res) => {
  try {

    const user = await User.findById(req.session.userID);
    await user.courses.push({_id:req.body.course_id});
    await user.save();

    res.status(200).redirect('/users/dashboard');
  } catch (error) {
    res.status(400).json({
      status: 'fail',
      error,
    });
  }
};


Sonrasında courseRoute.js dosyasında ilgili yönlendirmeyi yapalım:


router.route('/enroll').post(courseController.enrollCourse);


Enroll işlemini yaptığımızda bizim ihtiyacımız olan kurs bilgisini ilgili butona tıkladığımızda göndereceğiz. Bu butonu bir form alanında tanımlayacağız. course.ejs dosyası içerisine aşağıdaki formu ekleyeceğiz.


<form method="POST" action="/courses/enroll">
  <input type="hidden" name="course_id" value="<%= course._id %>">
  <button class="btn btn-lg btn-warning text-white"><span>ENROLL</span></button>
</form>



Proje GitHub


Çalışma Özel GitHub

Patika Plus Banner

Yazılım Kariyerinde İlerlemeni Hızlandıracak Eğitimler

Kendi kendine yazılım öğrenirken zorlanıyor, takıldığın noktalarda bir mentore mi ihtiyaç duyuyorsun? Patika+ programlarımız ile 4-8 aylık yoğun eğitim kamplarına katıl, proje tabanlı canlı dersler ve sana özel hazırlanmış eğitimlerle gereken tüm yetenekleri kazan, iş hayatına başla!

Comments

You need to enroll in the course to be able to comment!