public IActionResult CreateEvent(EventModel model) { //Oda bilgilerini her zaman getiriyoruz... Dropdownda yeniden doldurmak için. var roomlist = _roomService.GetRooms(); List <SelectListItem> roomList = (from k in roomlist select new SelectListItem { Text = k.Name, Value = k.Id.ToString() }).ToList(); //Başlangıç ve bitiş tarihlerini default olarak atadım. model.StartDate = DateTime.Now; model.EndDate = DateTime.Now.AddHours(1); //Toplantı sahibi oluşturucusu olarak default olarak bir test mail adresi atadım. model.CreatedBy = "*****@*****.**"; //davet ettiğim kullanıcıları burada sabit girdiğimi düşünün. model.Partipicants = "[email protected];[email protected];[email protected]"; var participantinvitedEmailList = model.Partipicants.Split(";"); //girilen her mail adresine ait katılımcı Toplantı-Katılımcı ara tablosuna yazılacak mail gönderilecek davetli listesi. List <Participant> invitedList = new List <Participant>(); //Burada tüm domain kullanıcılarının listesini aldım. Uygulama büyük olsaydı almazdım. var domainUserList = _eventService.GetParticipantList(); //Davet edilecek kullanıcıları db'den belirlemiş olduk... participantinvitedEmailList.ToList().ForEach(emailitem => { var participantuser = domainUserList.Where(i => i.Email == emailitem).FirstOrDefault(); invitedList.Add(participantuser); }); model.RoomList = roomList; Event eventItem = new Event(); eventItem.StartDate = model.StartDate; eventItem.EndDate = model.EndDate; eventItem.Name = model.Name; eventItem.EventRoomId = model.EventRoomId; //1- Toplantı(Event) Bilgisini Kaydettim. _eventService.InsertEvent(eventItem); //2- Toplantı ve Katlımcı Ara tablosuna Davet edilecek veya edilen katılımcıların listesini yazıyoruz. invitedList.ForEach(item => { Event_Partipicant ep = new Event_Partipicant(); ep.EventId = eventItem.Id; //Yukarıda oluşturduğum ep.PartipicantId = item.Id; // KatılımcıId; //Toplantıyı oluşturan kişinin katılım durumu(status) 0 set edilir. if (model.CreatedBy == item.Email) { ep.IsOwner = true; ep.Status = true; //Toplantıyı düzenlediği için doğal olarak toplanyıa katılacak onun için status-true } else { ep.IsOwner = false; ep.Status = false; //Henüz kullanıcılara davet maili gitmedi. Varsayılan katılım durumu false olarak işaretliyoruz. } _eventService.InsertEvent_Partipicant(ep); }); var ownerParticipant = invitedList.Where(ow => ow.Email == model.CreatedBy).FirstOrDefault(); EmailModel emailModel = new EmailModel(); //Şirket kullanıcılarına email daveti gönder... invitedList.ForEach(item => { EmailModel mailModel = new EmailModel(); mailModel.Body = $"<h2>Merhaba {item.Name + " " + item.SurName}, {ownerParticipant.Name + " " + ownerParticipant.SurName} size bir toplantı daveti gönderdi.</h2> Katılıyor musunuz? <br> <a href=''>Katılıyorum.</a><br>" + "<a href='{callbackUrl}'>Katılmıyorum.</a>"; mailModel.To = item.Email; mailModel.Subject = eventItem.Name; // Toplantı adı veya konusu mailModel.From = ownerParticipant.Email; mailModel.Name = ownerParticipant.Name + " " + ownerParticipant.SurName; //Her kullanıcı için publisher'a burada bir davet olduğunu bildiriyorum. Bir list olarakta verilebilir. _rabbitMQService.SendEmailToRabbitMQ(mailModel); }); return(View(model)); }